簡體   English   中英

git 變基浮動分支

[英]git rebase a floating branch

我在這里基於解決方案導入了另一個 repo 作為分支。

現在,新導入的分支是浮動的,它應該按照圖像中指定的方式連接。

我應該如何做rebase?

git checkout imported-branch
git rebase ????? --onto ????

git rebase

你不能得到你畫的東西,因為你在提交 hash IDs: f8114a中畫了。 鑒於f8114a被繪制為根提交,這意味着f8114a在過去、現在和將來永遠都是根提交。 但在圖的右側, f8114a不是根提交:它有一個父d0ece 因此,您聲稱f8114a既是根提交(沒有父級)又是常規的日常提交(一個父級, d0ece ),這根本不可能。

你也許能得到你想要的。 這完全取決於您想要什么。 但是,嘗試使用git rebase通常是一個壞主意:如果嘗試移植到其中一個分支的提交集中有任何分支和合並操作,rebase 本身將不得不重新執行所涉及的任何合並,這是破壞東西的秘訣。

現在,請記住,任何提交,無論其 hash ID 可能是什么,以及它可能具有的父 hash ID 都代表了該提交中包含的文件的完整且完整的快照 所以提交f8114a一個快照。 由於它沒有父級(在左側),Git 將顯示它作為與沒有文件的偽提交的比較。 1因此,當被視為一組更改時, f8114a包括添加其所有文件

如果你把f8114a復制到一個新的和改進的? commit—let's call this f9114a , although the actual hash ID will probably be different, but we need to have something to call it 2 —that does have a parent commit, though, now git show and other Git operations that compare the copy against its父級有一個快照進行比較。 所以現在,不是添加所有這些文件,差異可能會說刪除大部分文件,並創建這些大多是新的文件,然后更改大量剩余的文件

如果這對您來說沒問題,那么很容易在您自己的存儲庫中發生這種情況,而不會發生在任何人您的存儲庫進行的任何克隆中。 只需使用git replace --graft選項。 有關詳細信息,請參閱git replace文檔

一旦您對某些替換感到滿意,您可以使用無操作git filter-repo (或舊但仍受支持,並包含在 Git 發行版中, git filter-branch的提示) imported-branch 這將“將替換物固定到位”並允許您丟棄移植物; 克隆此過濾存儲庫將生成過濾存儲庫的副本,該副本不再使用替換技巧。


1從技術上講,Git 使用空樹來偽造這個偽提交。 它將您的提交樹與空樹進行比較,以生成所有“添加整個文件”差異塊。

2如果你願意,可以稱它為 Fred、Barney 或 Wilma; 只是不要晚飯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM