簡體   English   中英

如何在不計算提交的情況下以隔離方式交互式地重新綁定git主題分支?

[英]How do I interactively rebase a git topic branch in isolation without counting commits?

如果我有分支主人和主題如下:

A -- B -- C -- D (master)
     \
      W -- X -- Y -- Z (topic)

我需要使用各種修正,南瓜,修正等來操縱“主題”提交,我通常會檢查“主題”並運行git rebase -i 讓我說我這樣做,我將Z壓入Y,所以它作為一個獨特的提交消失了。 git rebase -i默認會重新定位到master的頭部,所以我會得到:

A -- B -- C -- D (master)
               \
                W -- X -- YZ

現在,我實際上不希望master上的新提交在我的主題分支上變得可見(例如,可能導致昂貴的重新編譯)。

建議的方法是在'topic'上發出git rebase -i HEAD~4 太棒了,這讓我得到了我真正想要的東西,Y和Z被壓扁,主題仍然來自'B'。

A -- B -- C -- D (master)
     \
      W -- X -- YZ (topic)

但是,我不喜歡這個是我需要手動計算主題中的提交數量。 這可能很大,肯定會改變,所以我不能只從shell歷史中重新運行它。 每次我想這樣做,我都需要運行'git log',計數提交,編輯命令等等,並且我一直在變換-i'。

如何在不需要手動計算主題分支上的提交來合成“HEAD~N”的情況下實現相同的效果? 換句話說,我想要一個非依賴於上下文的命令,這意味着交互式地修改當前主題分支上的所有提交,而不將它們遷移到master的頭部。

如果這是git rebase -i $(git ...)的形式,這很好,因為我只是計划對此命令進行別名或根據需要從我的歷史記錄中恢復它,但是,如果可能的話,我希望它不提及名稱主題分支,因為它再次使命令上下文敏感,我需要在更改主題分支時編輯它。

您可以獲取創建topic分支的提交

git merge-base topic master

所以在一個命令中,這是

git rebase -i `git merge-base topic master`

這將做你想要的:從topic的開始提交交互式rebase。

如果您希望它不包含任何分支名稱並正確設置上游分支,您還可以使用:

git rebase -i `git merge-base HEAD @{u}`

暫無
暫無

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

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