如何使用Git Extensions处理拉取请求?

时间:2010-10-22 03:51:59

标签: git git-extensions

我在github上有一个公共存储库,我在使用GitExtensions内部处理拉取请求时遇到问题。到目前为止我已经完成了3次,我认为他们中的任何一个都没有正常工作或者在我想要的地方工作。

  1. 19日,我试图处理易江创造的拉动请求。在GitExtensions中,我在GitExtensions中进行了拉取,放入远程存储库,选择master作为远程分支,并将 Merge远程分支保留为当前分支作为默认值。我点击了拉,它完成没有错误。我清理了一些东西,然后我在GitExtensions中进行了推送。它没有填写提交信息,这令我感到惊讶,所以我只是扔了易江的提交网址,因为我不知道还能做什么。结果是它显示为一对提交,一个来自Yi Jiang作为作者,一个来自我作为作者。

  2. 19日晚些时候,我试图处理迈克尔创建的拉取请求。由于我似乎很清楚我做了第一个错误,我寻找另一种选择。我运行了here找到的第一组命令,这看起来效果很好。唯一的问题是我必须通过命令行而不是GitExtensions来完成。

  3. 易江提出的另一项要求。由于通过GitBash而不是GitExtensions这样做最后似乎工作,我再次尝试。但是,这次它不会完成,因为存在合并冲突。好的,所以我去GitExtensions并进行合并,因为我知道这会让我解决冲突。所以,我打开Merge branches对话框并选择Merge with并选择Yi Jiang的主分支离开Keep a single branch line if possible (fast forward)。我解决冲突并推动。它会自动为我提交提交消息。这显示为4个条目,其中3个来自作者的作者,1个来自我作为作者。似乎不对。

  4. 所以我的问题是,我该如何正确地做到这一点?我有另一个拉取请求,我想确保我正确处理它。 fork队列说它不会干净利落,所以我预见到我需要进行合并。我想确保我正在合并,并且分支和提交归功于完成工作的人员。如果需要进行编辑,我应该先进行合并/推送,然后再使用单个分支进行第二次提交吗?这对需要解决合并有何影响?

    有人可以介绍在GitExtensions中正确处理拉取请求的确切过程吗?

1 个答案:

答案 0 :(得分:6)

#1听起来很正常 - 第一个是你引入的分支的提交,第二个是合并提交(实际上将分支合并在一起)。合并提交是由谁git pull完成的 - 但是如果你查看git blame中的文件,你会发现责备行全部是原始作者的(合并提交实际上并没有添加)除非你解决冲突,否则责备行。)

由于同样的原因,

#3看似正常 - 合并添加了一个实际合并分支的提交。

我对#2的猜测是,实际上的拉取请求是快进的,因此不需要合并提交,而#1和#3不是快进的(即使他们确实合并没有冲突,他们不是你的 HEAD直接后代。

基本上,我认为你实际上做得对,即使看起来有点奇怪。 :)

如果你想要一个稍微长一点的快进和合并之间差异的解释,这里是别人的话:

  

关于合并和“快进”

     

你会注意到我们已经多次看到“快进”这个短语。这是由“git merge”执行的特殊情况操作,其中分支可以沿线性序列前进。每当您提取直接构建在最近提交的同一提交之上的更改时,就会发生这种情况。换句话说,在多个存储库中并行创建并不存在任何分歧或同时提交。如果有并行提交,那么“git merge”实际上会引入一个新的合并提交来将两个提交绑定在一起。

     

当发生非快进合并时,总会发生冲突。在这种情况下,“git merge”将在文件中留下冲突标记并指示您解决冲突。完成后,您将发出“git commit -a”来创建合并提交。

(来自http://cworth.org/hgbook-git/tour/

修改

我去看了Github上的实际存储库。最后两次拉动(#2和#3)似乎已经正常工作,完成了应该做的事情 - 在#2的情况下快速转发,在#3中合并(使用添加的合并提交)。

我不太确定#1发生了什么 - 不知怎的,似乎,部分变更被你单独提交了?如果不能看到当时实际做的事情,真的无法说清楚。也许您有未提交的更改,而您在没有注意到的情况下提交了这些更改?