[英]My changes dissapeared after git reset --soft and git checkout. Where did they go?
[英]git reset --soft - does it go back to git checkout point or to the last git merge point?
我想我要找的是兩個分支的最老的共享祖先,或者類似的東西,這個問題似乎觸及了它: 用 Git 尋找一個分支點?
但是,而不是 OP 中的圖表,這更像是我所看到的:
-- I -- I -- I -- I -- I -- I -- I (integration branch)
\ \ /
\ \ /
F -- F -- F -- F (feature branch)
我的問題是 - 如果我們從集成中簽出一個功能分支並進行一些更改和一些提交,然后我們在進行時更新/合並集成幾次。 又名,提交提交,與集成合並,提交提交,與集成合並等。 如果我們然后執行git reset --soft <integration>
,是否將在使用git checkout
時將其重置為集成提交,或者它會簡單地將它重置到最后一次git merge
與集成發生的點嗎?
目標是讓我可以將我的功能變成一個大的提交。 如果git reset --soft
只能追溯到最后一次 git 與集成合並,那么我的功能可能有 100 次提交,這不是 bueno,我將需要另一種技術。
您可以使用git reset --soft
,但您必須先做一些其他的事情——或者更確切地說,不要做——首先。
目標是讓我可以將我的功能變成一個大的提交。
在這種情況下,請確保您不要從以下內容開始:
-- o -- A -- B -- C -- D -- E -- IM <-- integration
\ \ /
\ \ /
F1 -- F2 - FM - F4 <-- feature
請注意,我在這里替換了單個字母,以便我可以談論特定的提交。 就 Git 本身而言,兩個最有趣的提交是F4
,它是名為feature
的分支的提示提交,以及IM
,它是名為integration
的分支的提示提交。
標記為FM
的提交不是問題,即使它是合並提交。 標記為IM
的提交是一個問題。 那是因為這個提交可以從integration
的尖端到達。 有關一般可達性概念的(更多)更多信息,請參閱Think Like (a) Git 。 每當提交IM
本身可以通過從integration
點的提交開始,向后(向左)工作時,提交IM
本身到達的所有提交也是如此。 提交IM
會導致提交E
(不是問題)和F4
(問題!)。
如果您消除了commit IM
,那么您將擁有:
-- o -- A -- B -- C -- D -- E <-- integration
\ \
\ \
F1 -- F2 - FM - F4 <-- feature
您現在可以使用git checkout feature
並運行git reset --soft integration
,結果如下:
-- o -- A -- B -- C -- D -- E <-- feature (HEAD), integration
\ \
\ \
F1 -- F2 - FM - F4 [abandoned, but remembered as feature@{1}]
但是,您的索引和工作樹與檢出提交F4
時沒有變化,因此您現在可以運行git commit
將當前索引轉換為新提交。 名稱feature
現在將指向新的提交:
F <-- feature (HEAD)
/
-- o -- A -- B -- C -- D -- E <-- integration
\ \
\ \
F1 -- F2 - FM - F4 [feature@{1}]
新提交F
的快照將與提交F4
的快照匹配:
git diff feature@{1} feature
根本不會打印任何內容。 但是新提交F
的父項是現有提交E
。 (提交F
也有一個新的作者和提交者以及相應的“現在”時間戳,這也與F4
區分開來。)
每次將功能合並回integration
,您都在移動integration
(現在引用新的合並提交)
您需要在進行feature
分支和合並之前標記integration
,以便返回到它。
一個可能的標記是origin/integration
:您上次獲取integration
)。
另一個是git merge-base --fork-point
(基於reflog
,所以不可靠)或兩個分支的git rev-list --first-parent
之間的一些差異。
在任何情況下,您的git reset --soft
都必須使用該標記,而不是本地集成分支。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.