簡體   English   中英

git交互式rebase:停止而不提交

[英]git interactive rebase: stop without commit

(TLDR) git rebase -i有沒有一種方法可以停止編輯而沒有提交ID? (/ TLDR)

較長版本:

背景

使用git rebase -i ,我得到了一個文本編輯器,可以在其中定義命令列表,從每一行的pick COMMIT_ID開始。

選項之一是用“ edit COMMIT_ID”替換“ pick COMMIT_ID”,這意味着它將在提交后停止,以便我修改提交或進行一些手動操作。 然后我可以繼續git rebase --continue

從選項列表中:

#  e, edit = use commit, but stop for amending

我想知道是否有一個選項可以停止編輯而不選擇任何提交。

動機/用例

例如,如果我要壓縮一定范圍的提交,然后在某些手動操作之后停止,則必須在同一提交ID之前放置edit +壁書-這是不允許的。

相反,我會做這樣的事情:

pick COMMIT_0 Change some colors
pick COMMIT_1 Make it faster
squash COMMIT_2 Fix a typo in previous commit
squash COMMIT_3 Fix another typo in previous commit
edit
pick COMMIT_4 Refactor some things
pick COMMIT_5 Introduce new options

這種選擇還允許在序列中的第一次提交之前停止。

(我要說的是,它允許在整個歷史記錄的初次提交之前進行編輯,但這是不正確的-初次提交永遠不會成為重新設置序列的一部分)

如果我這樣做,git會這樣說:

警告:SHA-1丟失或不是以下行中的提交:

有趣的是,效果或多或少是我想要的,它停止了並且我可以做事情。 但是我敢肯定這不是預期的方式。

根據某些情況,您有一個,兩個或三個選項。

第一選擇

插入

exec false

或其縮寫

x false

在您要停止的地方。 您可能知道, exec在命令出現的位置運行shell命令。 但是,如果該命令失敗退出,則git rebase停止,並且命令false總是失敗退出。

第二選擇

如果您使用的是Git 2.20或更高版本,則可以插入

break

或其縮寫

b

在您要停止的地方。 引入此命令是出於您所要求的目的。

第三選擇

edit而不是pick標記要停止的位置之前的提交。 顯然,如果您想在第一次提交之前或在squashfixup提交之后停止,則此操作將無效。

我不知道那是不可能的。 壓扁之后,您必須進行第二次交互式變基,然后再修改提交。

暫無
暫無

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

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