如何撤消其他开发人员git push到主分支

时间:2016-06-03 14:33:13

标签: git push git-merge git-commit

这似乎会一直发生,但我找不到答案。

发生了什么:

另一位开发人员在本地服务器上使用主分支 git merge d分支导致冲突。然后 git add 编辑冲突, git commit ted,以及 git push ed the changes&与主分支冲突。放下麦克风离开了大楼:

问题:

有没有办法让我撤消这个最后冲突的提交,所以我可以将我的代码更改推送到master并继续我的一天,让其他开发人员修复他本地计算机上的冲突代码???

到目前为止我发现了什么:

我已经提交了我的本地更改并将“冲突提交”拉到我的本地服务器......

我发现的两个选项是:

选项1:

git revert -m 1 <conflicted commit>

这将撤消冲突提交所做的所有更改。但是当其他开发人员执行git pull时,他们所有的更改都将被删除。正确?

选项2:

git reset --hard <my commit>;
git push --force;

这将完全从git中删除冲突的提交,就好像它从未发生过(我不喜欢)。但现在其他开发人员本地服务器将不同步。

你会做什么?

3 个答案:

答案 0 :(得分:3)

如果只有一个要撤消的提交,最安全的修复方法是您的第一个选项:

Add

通常,在远程存储库上的任何提交中使用git revert -m 1 <conflicted commit>是危险的。如果有人克隆了存储库,因为这些更改已被推送并进行了自己的更改,那么当他们尝试与git reset同步时会遇到麻烦。有一个'悬空头'的'孤儿承诺'。虽然这些都可以随着时间的推移而解决,但是如果可以通过简单的git pull修复它,就没有理由遇到这种类型的麻烦。

答案 1 :(得分:0)

这里最简单的解决方案可能是最好的 - 特别是如果没有进行其他更改的话。在推送之前简单地为提交执行git checkout并重新提交这些文件仍然会让其他开发人员了解所做的事情的历史,同时解决您在冲突状态下遇到的问题。但是,这种方法的一个缺点是它确实会在您的存储库中留下冲突/非编译代码。

答案 2 :(得分:0)

我认为您需要改善工作流程。允许每个人更新服务器中的主分支并不好并且安全。此外,git push --force太危险了,你不应该在团队工作的任何公共分支上使用它。您可以允许任何推送到非主分支。代码审核小组会审核更改,并通过git mergegit cherry-pickgit rebasegit applygit am等将提交合并到主要分支中。提交到主分支,只使用git revert来撤消它。如有必要,开发人员可以使用git pull --rebase将本地更改与最新的主分支同步。他们也可以git fetch主分支并组织自己的提交。