超給力的git工具

如果沒有了這三個git小工具,我可能都活不下去了。

每個開發(fā)者都有一些他們自己喜歡的git技巧。下面分享一些是我最喜歡的,也是我從有印象以來一直在用的。

首先,這些這些命令大部分都是放在我的git-toolbelt中了,如果你想要用到他們,那么你需要使用 下面的命令安裝它。

$ brew install nvie/tap/git-toolbelt

快速打開修改過的文件

當(dāng)在一個分支上工作時,我經(jīng)常發(fā)現(xiàn)需要重新打開我正在處理的一些文件。Git tooolbelt 項目包含了一個可以顯示所有本地修改過的文件的命令。它將只列出本地仍然存在的文件,所以這個概覽不包含已刪除的文件。

$ git modified
controllers/foo.py
README.md

下面這個命令對于快速在編輯器匯總打開所有本地已經(jīng)修改過的文件超級有用。這絕對是我命令是每天最常用的命令。

$ vim $(git modified)

After quitting your editor, you can easily re-open the files you're working on this way.

退出編輯器后,你可以使用這種方式輕松的重新打開這些文件。

To also include any files modified in the index (files that are git add'ed already), use the -i flag:

也包括在索引中的已修改文件(這些文件已經(jīng)使用git add),使用 -i標(biāo)識:

$ git modified -i

You can also pass it a commit SHA, which will open all files modified in that commit:

您還可以向它傳遞一個commit SHA,它將打開該提交中修改過的所有文件:

$ git modified HEAD~1

為了更快的打開一組特定文件,我設(shè)置了如下的命令行的別名:

  • vc: vim打開所有本地修改的文件(未被索引)
  • vca:使用vim打開所有本地已修改文件(包含已被索引的)
  • vch: 使用vim打開最后 一次提交(HEAD)的所有文件
  • vc HEAD~1: 使用vim打開所有倒數(shù)第二次提交的文件

修補最后一次提交

您可能熟悉 git commit—amend,它將當(dāng)前暫存的更改合并到lastcommit中,有效地重寫了最后一個提交。toolbelt提供了一個類似的工具git fixup,可以做同樣的事情,但是commit信息不會顯示出來。所以,它就相當(dāng)于一個快速版的commit --amend.

$ git fixup

這是一個增量構(gòu)建的好方法。對我來說 ,典型的工作流是這樣的:

$ git add -p    # Pick bits to commit
$ git commit
$ git add -p    # Pick more bits
$ git fixup     # Add those to the last commit

清空最后一次提交

有時我可能會犯錯,或者做了太多的commit,又或者有些東西我本不想提交。例如,我不小心添加了額外的文件或不想包含在內(nèi)的布丁。我會用下面的命令來修復(fù)它:

$ git delouse

這將清空最后一次提交。 可以將“清空”看作保留提交消息和作者/日期信息,但將所有更改“移動”回工作樹中。

Technically:

技術(shù)實現(xiàn):

  • Soft-resets(軟刪除)最后一次提交,意味著從這個版本中移除最后一次提交,然后將要提交的內(nèi)容放回到工作樹中去(基本上是恢復(fù)到commit之前的狀態(tài))。
  • 添加一個空的commit,并且附帶上剛才的提交message和作者信息。

這些操作的最終結(jié)果就好像你最后一次commit的內(nèi)容被清空了,然后回到你的工作樹中。這個命令是非破壞性的,你的文件將保持不變。它們只是局部的改變。

這也將允許再次添加(re-adding)。只需要使用 git add -p來選擇要提交的代碼,然后使用 git fixup(見前面的段落)來保持最后一次提交,有效地從頭開始構(gòu)建它。

因為git delouse保持commit message和author信息在那次空的提交里,原始提交記錄永遠(yuǎn)不會丟失 ,在使用git fixup時,你不必重新輸入它們,整個處理過程 非常方便。

Typical flow:

處理流程:

$ git commit -m 'Add login screen'

# Oops! Checked in a secret key with that... let's fix this mistake!
$ git delouse

# Retry adding stuff
$ git add -p   # This time, don't add the secret key
$ git fixup    # Rewrites the previous commit

假如你犯了一個錯誤,你可以根據(jù)需要多次使用git delouse。由于這些命令不會破壞你本地的修改,所以允許你小心的編寫提交內(nèi)容 ,而不會有任何數(shù)據(jù)丟失的風(fēng)險。

commit切片

這也是一個切分commit的好方法。例如,假設(shè)你修復(fù)了一些bugs,同時也修改了一個變量的命名(會使變量的意思更清晰)。當(dāng)我們提交去review時,你意識到一個問題:變量的重命名給當(dāng)前的改變添加了不少的雜音。你可能會決定將這次提交分為兩片:其一就是修改變量命名,其二就是修復(fù)bug。 然后你可以在請求代碼review時,指向修復(fù)bug的提交。

它將如何工作?

$ git commit -m 'Bugfix for login screen'

# Oops, I should've split this one up. Let's start over!
$ git delouse
$ git add -p     # Just pick the bugfix bits
$ git fixup
$ git add -p     # Now pick the var rename bits
$ git commit -m 'Rename variable name to be clearer'

這三個命令是我日復(fù)一日的git歷程中,這三個命令已經(jīng)變得不可或缺。如果你也喜歡它,請告訴我哦!

作者:Vincent Driessen

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容