【发布时间】:2016-10-03 16:21:09
【问题描述】:
这似乎总是会发生,但我找不到答案。
发生了什么:
另一位开发人员在其本地服务器上 git merged 与 master 分支建立了一个分支,导致 冲突。然后 git added 冲突,git committed,并 git pushed 更改和冲突到 master 分支。丢下他的麦克风离开了大楼:
问题:
有没有办法让我撤消最后一次冲突的提交,这样我就可以将我的代码更改推送到 master 并继续我的一天,让其他开发人员在他的本地计算机上修复冲突的代码???
到目前为止我发现了什么:
我已经提交了我的本地更改并将“冲突提交”拉到我的本地服务器...
我发现的两个选项是:
选项 1:
git revert -m 1 <conflicted commit>
这将撤消冲突提交所做的所有更改。但是当其他开发人员执行 git pull 时,他们的所有更改都将被删除。对吧?
选项 2:
git reset --hard <my commit>;
git push --force;
这将完全从 git 中删除冲突的提交,就好像它从未发生过一样(我不喜欢)。但是现在其他开发者本地服务器会不同步。
你会怎么做?
【问题讨论】:
-
这些冲突是否在积极造成痛苦?也就是说,它们是否会导致测试失败或行为回归? Git 会告诉你合并时是否有冲突,但只要解决得好,一般不会有问题。
-
我会做选项 2。但是冲突的提交不会被完全删除。它在其他开发人员中,origin/master,(直到 pull/fetch)和 reflogs(你的,他的,服务器)。
-
您对第一个选项是正确的。如果您确实还原,其他开发人员更改将被删除。选项2是要走的路。在他的机器上,他的本地人将领先于他从服务器提交的内容。如果他再次拉取,更改将再次合并,从而导致他需要再次解决之前的冲突。
-
@makoto 网站已失效。
-
@Vishwanath 谢谢我已经选择了选项 2。我第一次这样做。希望其他开发人员不需要太多帮助即可重回正轨。
标签: git push git-merge git-commit