解开GIT混乱-在事实发生后分支/合并一些提交

解开GIT混乱-在事实发生后分支/合并一些提交,git,git-branch,Git,Git Branch,“不要从这里开始”的经典案例。。。正如所有事物的方式一样,我们的Git上出现了混乱,这棵树看起来像这样: A-B-C-D master \ E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff P-Q failed idea / A-B-C-D K-L-M-N-O

“不要从这里开始”的经典案例。。。正如所有事物的方式一样,我们的Git上出现了混乱,这棵树看起来像这样:

A-B-C-D  master
       \
        E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff
                            P-Q failed idea
                           /
A-B-C-D                K-L-M-N-O       U-V... master
       \              /         \     /
        \            /           R-S-T oh god fix it fix it arghh
         \          /
         E-F-G-H-I-J  exciting new stuff
A-B-C-D  master
       \
        E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff
然而,不幸的事实是,它会更好地反映如下情况:

A-B-C-D  master
       \
        E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff
                            P-Q failed idea
                           /
A-B-C-D                K-L-M-N-O       U-V... master
       \              /         \     /
        \            /           R-S-T oh god fix it fix it arghh
         \          /
         E-F-G-H-I-J  exciting new stuff
A-B-C-D  master
       \
        E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff
为了便于注释,让我们使用数字:

                            P-Q Branch 2
                           /
A-B-C-D                K-L-M-N-O       U-V... master
       \              /         \     /
        \            /           R-S-T Branch 3
         \          /
         E-F-G-H-I-J  Branch 1
我发现的最接近的问题是:

但我还不太清楚最重要的答案到底是什么让我想试试看

如果有帮助的话,这个项目很小,没有多人积极参与,因此假设我们可以摆脱像“改变历史”这样的顽皮行为。如果这有什么不同的话,它都是生活在github服务器上的,所以我们希望最终在该服务器上反映出变化,而不仅仅是本地变化

编辑:

好的,我会尽量说清楚我想做什么

我真的应该说:PQ是一个死路一条的开发,被有效地回退了,所以按您觉得最好的方式处理它!这个项目遭受了相当于整卷Dilbert漫画的混乱、恐慌和混乱,因此Git树和我自己的精神状态都受到了严重影响

起点当前树如下所示:

A-B-C-D  master
       \
        E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff
                            P-Q failed idea
                           /
A-B-C-D                K-L-M-N-O       U-V... master
       \              /         \     /
        \            /           R-S-T oh god fix it fix it arghh
         \          /
         E-F-G-H-I-J  exciting new stuff
A-B-C-D  master
       \
        E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff
步骤1我想以以下内容结束:

A-B-C-D             K-L-M-N-O-P-Q-R-S-T... master
       \           /
        E-F-G-H-I-J Branch 1
第2步我想这样做:

                              P-Q  Branch 2
                             /
A-B-C-D             K-L-M-N-O-R-S-T... master
       \           /
        E-F-G-H-I-J Branch 1

我想如果我能在不把宇宙一分为二的情况下完成这些工作,我就能从那里解决剩下的问题。

为了澄清这一点,我把这个分支命名为激动人心

步骤1

你可以

$ git checkout master
$ git cherry-pick K
$ git cherry-pick L
$ git cherry-pick M
$ git cherry-pick N
$ git cherry-pick O
$ git cherry-pick P
$ git cherry-pick Q
$ git cherry-pick R
$ git cherry-pick S
$ git cherry-pick T
$ git checkout -b branch2 Q  # make new branch2 at commit Q
$ git checkout master
$ git rebase HEAD~8 --interactive # 8 may not be the correct number. Pick big enough number so that P and Q are included
这看起来很难看所有单独的樱桃采摘,可能有一个更干净的方法,但我不知道它从我的头顶

在樱桃摘下你想掌握的一切之后

$ git checkout exciting
$ git reset --hard HEAD^^^^^^^^^^  # Reset back 10 commits, HEAD~10 would also work
步骤2

你可以

$ git checkout master
$ git cherry-pick K
$ git cherry-pick L
$ git cherry-pick M
$ git cherry-pick N
$ git cherry-pick O
$ git cherry-pick P
$ git cherry-pick Q
$ git cherry-pick R
$ git cherry-pick S
$ git cherry-pick T
$ git checkout -b branch2 Q  # make new branch2 at commit Q
$ git checkout master
$ git rebase HEAD~8 --interactive # 8 may not be the correct number. Pick big enough number so that P and Q are included
在弹出的编辑器中,删除表示提交p和Q的两行,以将它们从
master
的历史记录中删除。他们仍然住在
branch2


要将其推送到远程,您必须重写大部分历史记录,需要一个
git push--force
才能工作确保本地的repo状态是远程所需的,并且远程不包含本地没有的提交。否则它们将丢失。

但是你想做什么?按照你的图表显示的方式,唯一没有合并到主分支中的提交是p和Q。你的第一个图表显示这两个是“失败的想法”。所以是的,正如@TimCastelijns所说的,你想做什么?我猜我想实现(并理解)的两件事是:从开始将所有内容重新合并到主控中,然后/还分支一些选定的提交,例如

,同时不让我的脚卡在嘴里,并射出我的脚趾。不,PQ是一个死胡同更改,在中恢复(抱歉,混乱恐慌和混乱破坏了项目)-我已将问题更新为(尝试)反思一下。我可能遗漏了一些东西,但我们不是从图2开始的,我们是从我的帖子中的图1开始的,希望以最后的2结束。。。我们中有人误解了吗?@JohnU我的错,我想。。所以现在你只有主分支和另一个分支,还有令人兴奋的东西?是的,树的当前结构与我的第一张图相同。重读这篇文章,我意识到这两种方法都有可能。@JohnU好吧,忘了我之前在这里写的所有内容,我会编辑itExcellent,这看起来很有意义-我要对所有内容进行额外的双重备份,并尝试一下!