【问题标题】:git + github auto merge commit + pull requestgit + github 自动合并提交 + 拉取请求
【发布时间】:2016-04-27 14:59:15
【问题描述】:

我通过github 接口将回购vanilla 分叉到vanilla_copy, 之后我做:git clone vanilla_copy,过了一段时间我做 git pull 并获得一个新的提交 feature A,我的历史现在看起来像

Merge remote-tracking branch 'upstream/master'
feature A

在我做出自己的事情之后,它变成了:

feature created by me
Merge remote-tracking branch 'upstream/master'
feature A

现在我想创建pull requestvanilla

  1. 我的提交feature created by me 有parrent 是否正常 vanilla repo 中不存在?

  2. 我应该如何使用git 来不创建这个auto merge commit,使用git pull --rebase 或通过vanilla_copy/upstream 跟踪vanilla/master 并使用git rebase branch 或其他一些机制?

    李>
  3. 我应该如何删除这个现有的合并提交?我是否应该通过git rebase -i 然后git push -f 删除提交,如此处所述:Delete Github commit history

【问题讨论】:

    标签: git github version-control pull-request


    【解决方案1】:

    为了让 git repos 易于导航,我在提交拉取请求之前将我的提交压缩到几个或一个谨慎的变更集。修复错误通常只需要一次提交,而更大的功能可能包含几个单独的改进,更容易通过不同的提交进行跟踪。

    在上游主节点的最新状态基础上重新确定工作的基础后,您可能有多个与您正在处理的问题相关的提交。一切完成后,将它们压缩成一个带有描述性消息的提交,例如“问题 #100:一些错误修复”。

    要将四个提交压缩为一个,请执行以下操作:

    $ git rebase -i HEAD~4
    

    在出现的文本编辑器中,将要压缩到之前的提交旁边的“pick”替换为“squash”。保存并关闭编辑器,git 会将“squash”的提交与之前的提交合并。然后,Git 会给您机会将您的提交消息更改为“问题 #100:修复了一些错误”。

    重要提示:如果您已经将提交推送到 GitHub,然后在本地压缩它们,则必须强制推送到您的分支。

    $ git push origin branch-name --force
    

    有用的提示:您始终可以在推送之前编辑上一条提交消息,方法是:

    $ git commit --amend
    

    另见:

    Git Book Chapter 6.4: Git Tools - Rewriting History

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2011-05-05
      • 2019-12-08
      相关资源
      最近更新 更多