我们是两个工程师在同一个github回购工作。其他人在此回购中创建分支并提交PR
以下是完成的步骤
请澄清我在这里做错了什么以及如何避免这种提交消息?
命令git pull
,你们两个中至少有一个人使用它,为你运行另外两个Git命令。 (我在这里指的是“你”,但这可能是另一位工程师,或者你们两个可能正在轮流。想想“你们”代表“你们所有人”或“你们两个人”,即使只有一个你一次运行每个命令。)
git pull
为你运行的第一个命令总是git fetch
。这从另一个Git存储库获取提交。具体来说,它使用您命名的存储库 - 或默认情况下的origin
- 来查找它们没有的提交,可能是因为在您运行git clone
之后这些提交已添加到其存储库中。 Git将这些提交放入您的存储库副本中,所以现在您也可以使用它们。
git pull
运行的第二个命令通常是git merge
(您可以将其设置为运行不同的第二个命令,但显然您没有这样做)。当git pull
运行git merge
时,它提供,作为合并提交的日志消息:
Merge branch '<name>' of <url>
<name>
部分是git pull
告诉git fetch
从其他Git获取的分支的名称。 <url>
部分是git pull
告诉git fetch
联系的URL,以通过名称<name>
找到提交。因此,如果你的分支将origin/master
设置为其上游,你的git pull
让你的Git在origin
调用Git并从Git的master
获得任何新的提交。然后你的git pull
让你的Git合并这些提交,并带有消息Merge branch 'master' of ...
。
此时,您拥有他们(其他Git)的提交和您自己的提交,以及将两组提交绑在一起的合并提交。假设您使用自己的master
,这看起来像这样:
●--●--●
/ \
...--o--o ● <-- master (HEAD)
\ /
o-----o <-- origin/master
你的提交 - 你自己制作的 - 是排在最前面的;共享提交位于左中间行;并且他们的承诺 - 他们克隆后制作的 - 是沿着底行。最右边的提交是您刚刚进行的新合并提交。我已经标记了你拥有的提交,他们没有,就像坚实的黑色圆圈●
。
您现在运行git push origin master
将您的新提交发送到GitHub上的origin
的Git。这会发送你没有的提交,然后要求GitHub的Git将其master
设置为指向合并提交。如果它这样做,你的Git会记住这一点,所以你自己的图现在看起来像这样:
●--●--●
/ \
...--o--o ● <-- master (HEAD), origin/master
\ /
o-----o
当其他人在GitHub上运行git fetch
并保存另一个副本时,GitHub的Git的master
现在将指向同一个最终提交,所以你会看到Merge branch 'master' of <url>
作为这个master
最尖端提交的日志消息。
在考虑所有这些时,请记住现在有三个Git存储库。有GitHub的Git,持有你使用git push
更新的存储库的副本。有你的同事的Git,拿着你的同事从GitHub更新的存储库副本,你的同事使用git push
向GitHub发送更新。还有你自己的Git,持有你从GitHub获得的存储库的副本,你可以使用git push
将你的更新发送给GitHub。 GitHub的第三个存储库只是作为共享点。