背景
我有一个功能分支A,它是我的开发分支之前的一个提交:
3 (develop, origin/develop)
| 2 (A, origin/A) some feature branch commit
|/
1 some commit
然后我在开发(git checkout A
,git rebase develop
)时修改A,所以我得到:
2' (A) some feature branch commit
|
3 (develop, origin/develop)
| 2 (origin/A) some feature branch commit
|/
1 some commit
现在我无法再将A
推送到origin
,因为Git会拒绝非快进提交。它告诉我先拉远程更改。
当我这样做然后推动时,我最终得到以下历史:
4 (A, origin/A) merged origin/A into A
|\
2'| some feature branch commit
| |
3 | (develop, origin/develop)
| 2 (origin/A) some feature branch commit
|/
1 some commit
我最终得到一个包含2
提交两次的历史记录 - 技术上不同的提交,尽管它们做同样的事情。
问题
答案 0 :(得分:24)
一个rebase正在重写历史记录 - 为了避免麻烦,不要改变被推送的东西。
push --force
签出A
时可以origin/A
。您的A
版本将覆盖{{1}}历史记录。请注意,这需要其他开发人员在其回购后进行人工干预。
答案 1 :(得分:4)
我怎样才能阻止他的发生?如何在远程仓库上镜像我的本地rebase操作?
我该如何解决这种情况?什么是最优雅的方式来清理历史只显示一个提交?
删除远程分支并重新注册新的重新分支。如果你的团队中的其他成员可能已经撤回了你的分支“A”,请让他们知道删除该分支并重新发布新版本。