日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux系統(tǒng)下使用Git撤銷操作的方法教程( 三 )


原理: -i 參數(shù)讓 rebase 進(jìn)入“交互模式” 。它開始類似于前面討論的 rebase,但在重新進(jìn)行任何提交之前,它會暫停下來并允許你詳細(xì)地修改每個提交 。
rebase -i 會打開你的缺省文本編輯器,里面列出候選的提交 。如下所示:

Linux系統(tǒng)下使用Git撤銷操作的方法教程


前面兩列是鍵:第一個是選定的命令,對應(yīng)第二列里的 SHA 確定的 commit 。缺省情況下,rebase -i 假定每個 commit 都要通過 pick 命令被運用 。
要丟棄一個 commit,只要在編輯器里刪除那一行就行了 。如果你不再需要項目里的那幾個錯誤的提交,你可以刪除上例中的1、3、4行 。
如果你需要保留 commit 的內(nèi)容,而是對 commit 消息進(jìn)行編輯,你可以使用 reword 命令 。把第一列里的 pick 替換為 reword (或者直接用 r) 。有人會覺得在這里直接重寫 commit 消息就行了,但是這樣不管用 —rebase -i 會忽略 SHA 列前面的任何東西 。它后面的文本只是用來幫助我們記住 0835fe2 是干啥的 。當(dāng)你完成 rebase -i 的操作之后,你會被提示輸入需要編寫的任何 commit 消息 。
如果你需要把兩個 commit 合并到一起,你可以使用 squash 或 fixup 命令,如下所示:
Linux系統(tǒng)下使用Git撤銷操作的方法教程


squash 和 fixup 會“向上”合并 — 帶有這兩個命令的 commit 會被合并到它的前一個 commit 里 。在這個例子里,0835fe2 和 6943e85 會被合并成一個 commit,38f5e4e 和 af67f82 會被合并成另一個 。
如果你選擇了 squash,Git 會提示我們給新合并的 commit 一個新的 commit 消息; fixup 則會把合并清單里第一個 commit 的消息直接給新合并的 commit。這里,你知道 af67f82 是一個“完了完了… ?!?的 commit,所以你會留著 38f5e4e 的 commit 消息,但你會給合并了 0835fe2 和 6943e85 的新 commit 編寫一個新的消息 。
在你保存并退出編輯器的時候,Git 會按從頂部到底部的順序運用你的 commit 。你可以通過在保存前修改 commit 順序來改變運用的順序 。如果你愿意,你也可以通過如下安排把 af67f82 和 0835fe2 合并到一起:
Linux系統(tǒng)下使用Git撤銷操作的方法教程


[pagebreak]修復(fù)更早期的 commit
場景: 你在一個更早期的 commit 里忘記了加入一個文件,如果更早的 commit 能包含這個忘記的文件就太棒了 。你還沒有 push,但這個 commit 不是最近的,所以你沒法用 commit --amend.
【Linux系統(tǒng)下使用Git撤銷操作的方法教程】方法: git commit --squash 《SHA of the earlier commit》 和 git rebase --autosquash -i 《even earlier SHA》
原理: git commit --squash 會創(chuàng)建一個新的 commit,它帶有一個 commit 消息,類似于 squash! Earlier commit 。(你也可以手工創(chuàng)建一個帶有類似 commit 消息的 commit,但是 commit --squash 可以幫你省下輸入的工作 。)
如果你不想被提示為新合并的 commit 輸入一條新的 commit 消息,你也可以利用 git commit --fixup。在這個情況下,你很可能會用commit --fixup,因為你只是希望在 rebase 的時候使用早期 commit 的 commit 消息 。
rebase --autosquash -i 會激活一個交互式的 rebase 編輯器,但是編輯器打開的時候,在 commit 清單里任何 squash! 和 fixup! 的 commit 都已經(jīng)配對到目標(biāo) commit 上了,如下所示:
Linux系統(tǒng)下使用Git撤銷操作的方法教程


在使用 --squash 和 --fixup 的時候,你可能不記得想要修正的 commit 的 SHA 了— 只記得它是前面第 1 個或第 5 個 commit 。你會發(fā)現(xiàn) Git 的 ^ 和 ~ 操作符特別好用 。HEAD^ 是 HEAD 的前一個 commit 。HEAD~4 是 HEAD 往前第 4 個 – 或者一起算,倒數(shù)第 5 個 commit 。

推薦閱讀