Git 如何删除不应';因为推后分支太晚,所以不能成为分支的一部分?

Git 如何删除不应';因为推后分支太晚,所以不能成为分支的一部分?,git,rebase,Git,Rebase,我有一个分支,表示与文件XYZ交互的一组更改。我决定开始处理与ABC文件交互的项目的另一个组件(例如,没有相互包含的文件)。错误地,我提交了更改,然后进行了分支,而不是保存这些更改,所以现在对XYZ所做的工作意外地包含在第二个分支中。不幸的是,我已经将提交推送到这个分支的远程版本。我试着在下面做一个图表: /-G--H # second branch /--E # first branch -A--B--C 我想做的是: /--G--

我有一个分支,表示与文件XYZ交互的一组更改。我决定开始处理与ABC文件交互的项目的另一个组件(例如,没有相互包含的文件)。错误地,我提交了更改,然后进行了分支,而不是保存这些更改,所以现在对XYZ所做的工作意外地包含在第二个分支中。不幸的是,我已经将提交推送到这个分支的远程版本。我试着在下面做一个图表:

            /-G--H  # second branch
        /--E  # first branch
-A--B--C
我想做的是:

        /--G--H # second branch
-A--B--C
        \--E # first branch
第二个分支已经用git push-u origin第二个分支推送了

可以“移动”分支;签出第二个分支,并从E之后开始将其重设为提交C

因此,从这种情况来看:

* cb796d8 (HEAD -> second) H
* 0bc85b6 G
* d2c6ff8 (first) E
* ba28890 (master) C
* 41598db B
* 625c73b A
我只是说

git rebase --onto master first second
普雷斯托,我有这个:

* a305755 (HEAD -> second) H
* 18ebe9f G
| * d2c6ff8 (first) E
|/  
* ba28890 (master) C
* 41598db B
* 625c73b A

然而,当你试图推动结果时,你会遇到麻烦;您可能必须使用强制,因为当您尝试更改历史记录时,remotes不喜欢这样做,如果您在这些分支上与其他人合作,您必须警告他们您将要执行的操作。

首先,您需要重新设置基础:

git checkout second-branch
git rebase --onto C E
这将把E之后的所有提交移到C之上

现在推动您的分支:

git push --force

明白了,谢谢-我对重定基址(一般来说是git)是新手,但我的直觉是签出第二个,进入交互式重定基址,然后删除commit E。这大致正确吗?添加了实际的命令和图表。好吧,太棒了,成功了。谢谢是的,但现在等你试着推它时再说。:)谢天谢地,这两个分支是独立的,所以在我的例子中,强制工作很好