9

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

  1. 19 日,我尝试处理 Yijiang 创建的一个 pull request。在 GitExtensions 中,我在 GitExtensions 中进行了 pull,放入远程存储库,选择 master 作为远程分支,并将Merge remote branch to current branch作为默认设置。我点击了拉,它没有错误地完成。我清理了一些东西,然后我推送了 GitExtensions。它没有填写提交信息,这让我很惊讶,所以我只是把易江提交的 URL 扔了,因为我不知道还能做什么。结果是它显示为一对提交,一个来自 Yijiang 作为作者,一个来自我作为作者。

  2. 19 日晚些时候,我尝试处理 Michael 创建的拉取请求。因为很明显我做错了第一个,所以我寻找另一种选择。我运行了在这里找到的第一组命令,这似乎效果很好。唯一的问题是我必须通过命令行而不是在 GitExtensions 中完成。

  3. Yijiang 的另一个拉取请求。由于上次似乎通过 GitBash 而不是 GitExtensions 进行操作,所以我再次尝试。然而这一次,它不会完成,因为存在合并冲突。好的,所以我去 GitExtensions 并进行合并,因为我知道这可以让我解决冲突。所以,我打开 Merge branches 对话框,选择Merge withYijiang's master branch leave Keep a single branch line if possible (fast forward)。我解决冲突并推动。它会自动为我放入提交消息。这显示为 4 个条目,3 个来自作者 Yijiang,1 个来自我作为作者。似乎不对。

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

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

4

1 回答 1

7

#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 发生了什么 - 不知何故,您似乎将部分更改放入了单独的提交中?如果没有能够看看当时实际做了什么,就不能说得更好了。也许您有未提交的更改并且您在没有注意到的情况下提交了它们?

于 2010-10-22T04:16:57.670 回答