Git 常用命令

原文:Git 常用命令

從設(shè)計轉(zhuǎn)型開發(fā)的第一天起,老大只教我一件事葫录,使用 Git诉稍。
比起一上來就給我各種任務(wù)寫 HTML/CSS/JS 調(diào)各種 Bug, 讓我熟練掌握 Git 這件事至今我都非常感激。
毫無疑問地說灯萍,Git 是當今編程學(xué)習(xí)里最基本的必備技能。

我記得很清楚每聪,當時我問他旦棉,假如全世界的工具你只能保留一個在電腦齿风,你的選擇是什么?
Git绑洛,老大很肯定地回答救斑,當時我很不解。
3 年后真屯,如果現(xiàn)在要我回答這個問題脸候,我會給出同樣的答案。

Git 的強大一本書都不足以全部說明绑蔫,更何況一篇博客运沦。
本文記錄了我 3 年來使用 Git 最頻繁的命令(不包括最基本的add/commit/push/pull等),
很負責地說配深,學(xué)會這些基本也就能快樂地玩轉(zhuǎn) Git 了 (持續(xù)整理更新中)携添。

Hope you enjoy!

1. 超實用 Alias

alias g="git"
alias gb="git branch"
alias gco="git checkout"
alias gcmsg="git commit -m"
alias gamend="git commit --amend -C HEAD"
alias gst="git status"
alias log="git log --oneline --graph --decorate --color=always"
alias logg="git log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)—     %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative"

2. 取回遠端 master 與本地 master 分支合并

gco master

g fetch --all 或者
g fetch origin master

g reset --hard origin/master(本地沒有修改,所以完全覆蓋也沒關(guān)系) 或者
g rebase origin/master(本地有修改還沒push)

3. 推送分支到遠端

假設(shè)現(xiàn)在所在的分支是import凉馆,指定推送到遠端分支liujin-import

g push origin import:liujin-import

假如遠端的 liujin-import 分支已經(jīng)不需要薪寓,可以直接覆蓋掉

g push -f origin import:liujin-import

4. 追加文件到某個 commit

有時候修完某功能并提交了 commit 之后才發(fā)現(xiàn)還有一點小修改,這時候又不想再提交一個commit澜共,可以追加這個文件到前一個commit向叉,步驟如下:

git add 你要追加修改的文件
git commit --amend -C HEAD 或者 gamend

5. 查找包含某文件的 commit

git log 文件路徑
git show commit_id

或者

git log --follow filename(絕對路徑)

Ref: List all commit for a specific file

6. 把一個 commit 分拆為兩個 commit

老大常說要養(yǎng)成一個小改動對應(yīng)一個commit的習(xí)慣,但是有時候?qū)懙锰珌y懶得去分割就把很多改動做成了一個commit嗦董,這樣子增加了以后維護的難度母谎,所以要把一個 commit 分拆為多個 commit 怎么辦呢?

  • 首先把你要分拆的 file reset 了:
git reset HEAD~1 path/to/file
# This doesn't delete your changes to path/to/file
  • 接著修改當前這個 commit 的 message京革,命令是:
git commit --amend -v
# -v參數(shù)是打開editor編輯
  • 然后就可以把 reset 出來那個 file 新建一個 commit奇唤,命令是:
git commit -v path/to/file

這樣就把一個 commit 分拆為兩個啦,_

7. 刪除某些 commit

git rebase -i HEAD~10

8. 追加修改到之前某個 commit

假如 gst 發(fā)現(xiàn)已經(jīng)有文件被修改匹摇,這時候需要把修改暫存起來咬扇。

git stash

接著找到你需要追加修改的那個commit id,如4b739bb

g rebase 4b739bb~ -i 或者
g rebase -i HEAD~5 #列出最近5個commit

這時候會自動打開編輯器廊勃,把你需要修改的 commit 前面的 pick 改成 edit懈贺,保存,關(guān)閉編輯器坡垫,這時候會回到終端梭灿,再輸入:

g stash pop

把暫存的修改讀出來,然后做修改冰悠,g add .堡妒,最后

g rebase --continue

9. 查找含有特定關(guān)鍵字的 commit

  • git log --grep
    最基本的用法

  • git log --grep=frotz --grep=nitfol --since=1.month
    查找一個月以內(nèi)commit log message里含有 frotz 或者 nitfol 的 commits

  • git log --grep=frotz --author=Linus
    查找指定作者

  • git grep -l -e frotz --and -e nitfol
    查找同一行含有 frotznitfol 的文件

  • git grep -l --all-match -e frotz -e nitfol
    查找文件里面含有 frotznitfol 的文件(不局限于同一行)

10. 清空 git working copy 還沒追蹤的文件

  • git clean -f

  • git clean -f -d
    如果還想刪除目錄

  • git clean -f -X
    如果只是想刪除忽略的文件

  • git clean -f -x
    如果想刪除忽略和非忽略的文件

11. 清理本地倉庫

長時間做一個項目,經(jīng)常需要 git fetch溉卓,這樣做每次都會拉回遠端的全部分支皮迟。
即使遠端有些分支已經(jīng)刪除搬泥,但是運行git branch -a還是會顯示已刪除的分支,
長時間下來這個列表就會很長很長万栅,這時候就需要清理一下本地的倉庫了:

git remote prune origin
# `prune`會刪除任何不存在于遠端倉庫的分支佑钾,這樣運行 `git branch -a`命令的時候頓時就清靜了

12. 創(chuàng)建追蹤遠端分支的本地分支

gb dev origin/r1-dev
#Branch dev set up to track remote branch r1-dev from origin.

13. 分支移動

g branch -f master HEAD~3
# 把 master 分支強制移到 HEAD 前面第三個 commit

14. Revert一個 Merge

git revert -m 1 M -> W

---o---o---o---M---x---x---W
              /
      ---A---B

15. 獲取短的 commit hash

git rev-parse --short HEAD

16. commit 了以后才記起來忘了創(chuàng)建 .gitignore, 垃圾文件都已經(jīng)提交

比如說一個nodejs項目,一開始的時候就忘記了創(chuàng)建.gitnore文件忽略掉node_modules的內(nèi)容烦粒,所以其中的內(nèi)容就已經(jīng)被提交了休溶。

即使緊接著你在.gitignore加了一行node_modules, 已經(jīng)被提交的文件是不會自動刪除的。

這時候你就需要做的就是:

git rm --cached path/to/ignored
#nodejs案例就是
git rm -r --cached node_modules

17. 提交所有被刪除的文件

$ git add -u

這個命令告訴 git 自動更新已跟蹤的文件, 包括被刪除的已跟蹤文件扰她。

如果你用的是 git 2.0

$ git add -u :/

友情提示:從 git 2.0(2013年中)開始兽掰,以上命令會 stage 整個 working tree 的文件。
如果你只是想 stage 當前目錄的文件徒役,應(yīng)該這么用:

$ git add -u .

詳情可以去搜 "“git add -A” 和 “git add .” 的區(qū)別".

Ref: StackOverflow

18. 撤銷上一次 git add . 操作

這種情況通常是因為忘記添加.gitignore文件孽尽,或者一時手快把一些非必要的文件(如node_modules)跟蹤了, 解決辦法:

git reset

該命令會 unstage 你上一個 commit 增加的所有文件。

如果你只想 unstage 某些文件:

git reset -- <file 1> <file 2> <file n>

還可以 unstage 文件里某處的改動:

git reset -p
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忧勿,一起剝皮案震驚了整個濱河市杉女,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸳吸,老刑警劉巖熏挎,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晌砾,居然都是意外死亡坎拐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門养匈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哼勇,“玉大人,你說我怎么就攤上這事呕乎』#” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵猬仁,是天一觀的道長帝璧。 經(jīng)常有香客問我,道長逐虚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任谆膳,我火速辦了婚禮叭爱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漱病。我一直安慰自己买雾,他們只是感情好把曼,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漓穿,像睡著了一般嗤军。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晃危,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天叙赚,我揣著相機與錄音,去河邊找鬼僚饭。 笑死震叮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鳍鸵。 我是一名探鬼主播苇瓣,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偿乖!你這毒婦竟也來了击罪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贪薪,失蹤者是張志新(化名)和其女友劉穎媳禁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體古掏,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡损话,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了槽唾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丧枪。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖庞萍,靈堂內(nèi)的尸體忽然破棺而出拧烦,到底是詐尸還是另有隱情,我是刑警寧澤钝计,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布恋博,位于F島的核電站,受9級特大地震影響私恬,放射性物質(zhì)發(fā)生泄漏债沮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一本鸣、第九天 我趴在偏房一處隱蔽的房頂上張望疫衩。 院中可真熱鬧,春花似錦荣德、人聲如沸闷煤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲤拿。三九已至假褪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間近顷,已是汗流浹背生音。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幕庐,地道東北人久锥。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像异剥,于是被迫代替她去往敵國和親瑟由。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 配置 列出當前配置:$ git config --list 列出repository配置:$ git config...
    亮仔菲個閱讀 232評論 0 0
  • 我的常用: ===================================** 撤銷工作修改:**1冤寿、gi...
    ddai_Q閱讀 733評論 0 5
  • 252days 去表姐家第一次哭成那樣~ 到底是怎么了歹苦?!
    sueva閱讀 182評論 0 0
  • 菩薩蠻 李白 平林漠漠煙如織督怜,寒山一帶傷心碧殴瘦。暝色入高樓,有人樓上愁号杠。玉階空佇立蚪腋,宿鳥歸飛急。何處是歸程姨蟋?長亭更短...
    愛笑陽陽陽閱讀 212評論 0 3