我有一个GitHub project正在从事研究,同时我正在学习Git。今天,我读到了有关使用rebase
命令进行压缩的信息,并想对几天前我推送的一些提交进行尝试。
我要使用的提交是2b16710
和32fef8e
。在我的本地存储库主分支上,日志如下所示:
* f49573f - (21 hours ago) [#12] Add durability icons - KamilPacanek (origin/enh/12-durability, enh/12-durability)
* 1c9fec4 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
* d68bebe - (2 days ago) Merge branch 'enh/7-introducing-clock-ticks' - KamilPacanek (HEAD -> master, origin/master)
|\
| * 2b16710 - (2 days ago) [#7] Refactors - KamilPacanek
| * 32fef8e - (2 days ago) [#7] Implements game ticks - KamilPacanek
|/
* f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek
如您所见,在提交之后,我做了一个功能分支(enh/12-durability
)。
我尝试了以下方法-checkout
主服务器,进行了实验性分支,并执行了以下命令来压缩提交。
git rebase -i f699930
我用2b16710
标记了fixup
,结果得到了下面的树:
* a7641cc - (2 days ago) [#7] Implements game ticks - KamilPacanek (HEAD -> exp-squash)
| * f49573f - (21 hours ago) [#12] Add durability icons - KamilPacanek (origin/enh/12-durability, enh/12-durability)
| * 1c9fec4 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
| * d68bebe - (2 days ago) Merge branch 'enh/7-introducing-clock-ticks' - KamilPacanek (origin/master, master)
| |\
|/ /
| * 2b16710 - (2 days ago) [#7] Refactors - KamilPacanek
| * 32fef8e - (2 days ago) [#7] Implements game ticks - KamilPacanek
|/
* f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek
此后,我做了一些比较以确保a7641cc
包含与这两个压扁的相同的更改,并且确实如此。
接下来,我试图弄清楚如何将这些更改合并到我的master
中,最后推送到origin
来重写历史记录,但是:
enh/12-durability
分支机构-我是唯一的贡献者,因此我可以完全控制该过程,但是首先我必须知道如何将新的历史记录应用于该分支机构(或者也许我没有必须完成,因为我要在完成工作后将其与master合并) 我想实现这样的功能(请注意,没有2b16710
提交):
* f49573f - (21 hours ago) [#12] Add durability icons - KamilPacanek (origin/enh/12-durability, enh/12-durability)
* 1c9fec4 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
* d68bebe - (2 days ago) Merge branch 'enh/7-introducing-clock-ticks' - KamilPacanek (HEAD -> master, origin/master)
|\
| * 32fef8e - (2 days ago) [#7] Implements game ticks - KamilPacanek
|/
* f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek
我走对了吗?我感觉我需要挑选一些提交来使其正确..但我不知道。
答案 0 :(得分:2)
您创建了一个实验分支exp-squash
并对其进行了工作。到目前为止,仅exp-squash
的历史记录已被重写。 master
和enh/12-durability
不变。
如果您在git rebase -i f699930
上运行master
,则图形将几乎相同,只是HEAD->master
将装饰新生成的提交(假设abc1234
,如下所示):
* abc1234 - (2 days ago) [#7] Implements game ticks - KamilPacanek (HEAD -> master)
| * f49573f - (21 hours ago) [#12] Add durability icons - KamilPacanek (origin/enh/12-durability, enh/12-durability)
| * 1c9fec4 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
| * d68bebe - (2 days ago) Merge branch 'enh/7-introducing-clock-ticks' - KamilPacanek (origin/master)
| |\
|/ /
| * 2b16710 - (2 days ago) [#7] Refactors - KamilPacanek
| * 32fef8e - (2 days ago) [#7] Implements game ticks - KamilPacanek
|/
* f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek
这样,master
的历史记录将被重写。它的头从d68bebe
移到abc1234
。 abc1234
包含与压缩的2b16710
和32fef8e
相同的更改。 d68bebe
作为合并提交而没有-p
,则被删除。您无需将abc1234
应用于或合并到master
,因为它已经在master
上。
对于enh/12-durability
或从比d68bebe
更新的提交中创建的任何其他分支,您可以选择不合并abc1234
到它们,因为它们已经包含了与它们等效的更改。历史中abc1234
的位置。
enh/12-durability
仍然包含一些属于master
,32fef8e
,2b16710
和d68bebe
的历史记录的提交。如果以后将enh/12-durability
合并到新的master
中,这些提交将再次引入master
中。因此最好也重写enh/12-durability
。
git rebase --onto abc1234 d68bebe enh/12-durability
图形如下:
* abc3333 - (21 hours ago) [#12] Add durability icons - KamilPacanek (HEAD->enh/12-durability)
* abc2222 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
* abc1234 - (2 days ago) [#7] Implements game ticks - KamilPacanek (master)
* f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek
然后您需要强制推master
和enh/12-durability
来更新它们在远程存储库中的对应对象。
您想获得的最后一个图形是不可能的。至少在重写历史记录之后,您无法使提交哈希保持不变。不管散列如何,都可以使用git rebase
或git reset --hard
和git cherry-pick
来构造这样的图。