Git:在本地重新基址后重复提交,然后拉

Git:在本地重新基址后重复提交,然后拉,git,Git,背景: 我有一个功能分支a,它比我的开发分支早一步提交: 3 (develop, origin/develop) | 2 (A, origin/A) some feature branch commit |/ 1 some commit 然后我在develop上重新设置了A的基础(git checkout A,git-rebase-develop),因此我得到: 2' (A) some feature branch commit | 3 (develop, origin/deve

背景:

我有一个功能分支a,它比我的开发分支早一步提交:

3   (develop, origin/develop)
| 2 (A, origin/A) some feature branch commit
|/
1   some commit
然后我在develop上重新设置了A的基础(
git checkout A
git-rebase-develop
),因此我得到:

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
的历史记录——虽然它们做的是相同的事情,但在技术上是不同的提交

问题

  • 我怎样才能防止这种情况发生?如何在远程回购上镜像本地重定基础操作
  • 我怎样才能补救这种情况?哪种最优雅的方式可以清理历史,只展示一次承诺
  • 重定基址就是重写历史——为了避免麻烦,不要对推送的东西重定基址

  • 在签出
    A
    时,可以
    push--force
    <代码>源代码/A历史记录将被您的
    A
    版本覆盖。请注意,这将需要其他开发商在其回购协议中进行手动干预

  • 我怎样才能阻止他的发生?如何在远程回购上镜像本地重定基础操作

    我怎样才能补救这种情况?哪一种最优雅的方式来清理历史?只有一次承诺


    删除远程分支并重新发布新的重定基础分支。如果您团队的其他成员可能已经删除了您的分支“A”,请让他们知道删除该分支并重新发布一个新版本。

    您不能在A上重新开发基础吗?您可以改为进行git合并吗?可能是重复的。如果您这样说,听起来很简单。对于JBoss 7 GitHub repo,他们决定不希望历史上出现合并,因此,所有分支都重新设置了基础。所以每个特性分支都需要这样处理,子提交者只需要在这个分支上进行同步(重新设置基础)。很容易弄得一团糟。。。。如果他们(可能)在那个分支上工作,告诉他们在你刚刚重定基础的分支上重定基础。