用git提交到同一个分支

时间:2009-05-26 22:08:23

标签: git branch

假设有两个人在git分支上工作,他们同时检查,但其中一个先提交,然后另一个提交。最新的提交是否仍然会与之前的提交合并,或者多个人可以同时在同一个分支上工作?

5 个答案:

答案 0 :(得分:35)

那么,当你克隆一个git存储库(那就是“check out”的意思吗?)时,你就是在有效地创建一个新的分支。 Git分支是每个存储库的本地分支,而不是全局的。话虽如此,您有一个协议,用于如何在存储库之间传输分支更新 - 当您从远程执行时,默认情况下,远程的“主”分支将合并到您的“主”分支中。当你推动时,你的“主”分支可以附加到遥控器的主分支。所以你的主人和遥控器的主人(“起源/主人”,如果你愿意的话)是不同的分支,但按惯例相关。

回到这一点---你注意到当你推到遥控器时我说你的主分支可以追加。如果两个人已经获得了原产地/主人的副本并进行了独立更改(记住这就像在本地对两个分支进行更改一样),一旦一个人推动他们的更改,另一个人的更改不是简单附加到原点/掌握了 - 他们必须合并。当你推动时,这种情况不会发生,只有当你拉动时(令人困惑的是,“拉”与“推”不完全相反:“提取”与推动相反 - 拉动是一个提取,然后是合并(或反叛))。

因此,如果您处于这种情况,那么首先尝试推送更改的人需要从更新的origin / master撤回,合并​​或重新绑定他们的master版本,然后推送。默认情况下,您无法删除某人对分支的更改并将其替换为您自己的更改:您至少需要执行“git push -f”来执行此操作,并且远程存储库可以具有设置或挂钩以使其更加困难。

或者他们中的两个可以事先合作:其中一个拉动另一个的变化,进行合并,然后推动结果。如果变化可能会重叠或相互影响,这可能是一件好事。请记住版本控制系统的第一定律: VCS不能代替通信

答案 1 :(得分:8)

在Git中,分支严格本地。一个开发人员无法更改另一个开发人员的远程分支(请参阅底部的注释)。但是,对于 bare 存储库,您可以“推送”对其的更改,以便更新远程存储库的分支,如果您的更改将导致快进。

但是如果两个开发人员提交到同一个远程存储库,那么只有一个开发人员能够快速转发远程分支,而无需先将其分支恢复到最新状态。

例如,假设Alice和Bob都在其本地存储库中的主分支上工作,每个存储库都是从服务器上的共享(裸)存储库克隆的。如果Alice首先完成了她的工作,当她将提交的更改推送到共享裸存储库时,它将快速转发裸仓库的主分支。

现在Bob无法快速转发裸仓库的主分支,而无需先更新其本地分支以包含Alice添加的提交(因为他添加的提交不是Alice创建的提交的祖先)。

Bob可以做到这一点的一种方法是在Alice推送她的提交后从裸仓库中拉出(或者最好是rebase)。这会将Alice的更改合并到Bob的分支中,并使Bob可以通过推送快速转发裸仓库的主分支。

其他工作流程也是可能的:Alice和Bob可以直接相互协作,而无需使用共享的裸存储库。真的,几乎有无穷无尽的可能性。但总的来说,Git中的合并是通过更改完成的。

[注意:它实际上可以推入非裸存储库,从而更新其他人的分支,但这通常会产生不直观的结果,不被认为是典型的git工作流程,并且通常不被鼓励]

答案 2 :(得分:6)

答案较短:

commit -m "my changes"

检索共享版本

git fetch sharedrepo

这两个将您的本地分支与其他仓库同步

git merge sharedrepo/sharedbranch
git rebase sharedrepo/sharedbranch

如果您不希望在最终历史记录中包含大量分支,则Rebase会对历史记录进行序列化。这两个选项可能会强制您在完成之前解决冲突。

合并/重组和解决冲突后,你会回到repo

git push sharedrepo HEAD:sharedbranch

不要在这里使用-f,因为这应该是快进的。如果你运气不好,别人可能会推出一个新版本。如果发生这种情况,请重新启动此过程。

答案 3 :(得分:1)

您可以单独工作,然后在需要推/拉更改时执行:

git add --all .
git commit -m "Commit desc"
git pull
git push

<强>解释

git add --all .

添加所有更改,包括已删除的文件

git commit -m "Commit desc"

声明提交

git pull

首先拉,将合并,你可能需要解决冲突

git push

推送最新的合并版本[可选 - 如果您想提交更改]

如果您想进一步控制,例如能够同时处理多个本地/远程版本,请查看branches

我推荐这个简单但有用的页面作为建议的工作流http://genomewiki.ucsc.edu/index.php/Working_with_branches_in_Git涵盖了一些很棒的程序。

答案 4 :(得分:0)

多人可以同时在同一个分支上工作。当你拉动(或让另一个人推动)你的改变时,git会将这些改变合并在一起,从而产生一个包含你的两个改变的分支。