Git:在本地rebase之后重复提交,然后拉

时间:2011-09-18 15:45:43

标签: git

背景

我有一个功能分支A,它是我的开发分支之前的一个提交:

3   (develop, origin/develop)
| 2 (A, origin/A) some feature branch commit
|/
1   some commit

然后我在开发(git checkout Agit 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提交两次的历史记录 - 技术上不同的提交,尽管它们做同样的事情。

问题

  1. 如何防止这种情况发生?如何在远程仓库上镜像我的本地rebase操作?
  2. 我该如何解决这种情况?什么是最优雅的方式来清理历史记录并只显示一次提交?

2 个答案:

答案 0 :(得分:24)

  1. 一个rebase正在重写历史记录 - 为了避免麻烦,不要改变被推送的东西。

  2. push --force签出A时可以origin/A。您的A版本将覆盖{{1}}历史记录。请注意,这需要其他开发人员在其回购后进行人工干预。

答案 1 :(得分:4)

  

我怎样才能阻止他的发生?如何在远程仓库上镜像我的本地rebase操作?

     

我该如何解决这种情况?什么是最优雅的方式来清理历史只显示一个提交?

删除远程分支并重新注册新的重新分支。如果你的团队中的其他成员可能已经撤回了你的分支“A”,请让他们知道删除该分支并重新发布新版本。