这似乎会一直发生,但我找不到答案。
发生了什么:
另一位开发人员在本地服务器上使用主分支 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中删除冲突的提交,就好像它从未发生过(我不喜欢)。但现在其他开发人员本地服务器将不同步。
你会做什么?答案 0 :(得分:3)
如果只有一个要撤消的提交,最安全的修复方法是您的第一个选项:
Add
通常,在远程存储库上的任何提交中使用git revert -m 1 <conflicted commit>
是危险的。如果有人克隆了存储库,因为这些更改已被推送并进行了自己的更改,那么当他们尝试与git reset
同步时会遇到麻烦。有一个'悬空头'的'孤儿承诺'。虽然这些都可以随着时间的推移而解决,但是如果可以通过简单的git pull
修复它,就没有理由遇到这种类型的麻烦。
答案 1 :(得分:0)
这里最简单的解决方案可能是最好的 - 特别是如果没有进行其他更改的话。在推送之前简单地为提交执行git checkout
并重新提交这些文件仍然会让其他开发人员了解所做的事情的历史,同时解决您在冲突状态下遇到的问题。但是,这种方法的一个缺点是它确实会在您的存储库中留下冲突/非编译代码。
答案 2 :(得分:0)
我认为您需要改善工作流程。允许每个人更新服务器中的主分支并不好并且安全。此外,git push --force
太危险了,你不应该在团队工作的任何公共分支上使用它。您可以允许任何推送到非主分支。代码审核小组会审核更改,并通过git merge
,git cherry-pick
,git rebase
,git apply
,git am
等将提交合并到主要分支中。提交到主分支,只使用git revert
来撤消它。如有必要,开发人员可以使用git pull --rebase
将本地更改与最新的主分支同步。他们也可以git fetch
主分支并组织自己的提交。