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

avd*_*aag 19 git

背景:

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

3   (develop, origin/develop)
| 2 (A, origin/A) some feature branch commit
|/
1   some commit
Run Code Online (Sandbox Code Playgroud)

然后我在开发(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
Run Code Online (Sandbox Code Playgroud)

现在我再也无法推动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
Run Code Online (Sandbox Code Playgroud)

我最终得到了一个包含2提交两次的历史记录- 技术上不同的提交,尽管它们做同样的事情.

问题

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

Paw*_*rok 24

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

  2. 你可以push --force一边A检查一下.origin/A历史记录将被您的版本覆盖A.请注意,这需要其他开发人员在其回购后进行人工干预.