由于推送后分支太晚,如何删除不应该成为分支一部分的提交?
How to remove a commit that shouldn't be a part of a branch due to branching too late after push?
我有一个分支代表一组与文件 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 second-branch
“搬”支线没问题;签出第二个分支并将其变基,从 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
但是,当您尝试推送结果时,您会 运行 遇到麻烦;你可能不得不使用武力,因为当你试图改变历史时,远程不喜欢它,如果你在这些分支上与其他人合作,你将不得不警告他们你将要做什么。
首先你需要变基:
git checkout second-branch
git rebase --onto C E
这会将 E 之后的所有提交移动到 C 之上。
现在推送你的分支:
git push --force
我有一个分支代表一组与文件 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 second-branch
“搬”支线没问题;签出第二个分支并将其变基,从 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
但是,当您尝试推送结果时,您会 运行 遇到麻烦;你可能不得不使用武力,因为当你试图改变历史时,远程不喜欢它,如果你在这些分支上与其他人合作,你将不得不警告他们你将要做什么。
首先你需要变基:
git checkout second-branch
git rebase --onto C E
这会将 E 之后的所有提交移动到 C 之上。
现在推送你的分支:
git push --force