git 常用命令

本文記錄了筆者的 git 操作筆記

基本配置

  1. git init 初始化
  • git config --global user.name 'xxx'
  • git config --global user.email 'xxxxxx@xx.com'
  • git config --global color.ui auto 提高命令輸出的可讀性
  • 漂亮的 git log 輸出形式 l = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

基本操作

  • git add 文件名 添加到倉(cāng)庫(kù)
  • git status 查看狀態(tài)
  • git status -sb 簡(jiǎn)單的查看狀態(tài)并且顯示對(duì)應(yīng)分支
  • git commit -m "" 提交 -am ''
  • git rm 刪除
  • git push 推送
  • git pull 獲取
  • git merge --no-ff 分支名 為了明確記錄下本次merge泼差,加 --no-ff參數(shù)
  • git diff 此命令比較的是工作目錄(Working tree)和暫存區(qū)域快照(index)之間的差異
    也就是修改之后還沒有暫存起來的變化內(nèi)容。
  • git show <id> 查看某次提交的修改詳情
  • git commit --amend 修改本次的提交信息
  • git merge -Xours [branch] 產(chǎn)生沖突時(shí),以自己的分支為準(zhǔn),合并代碼
  • git merge -Xtheirs [branch] 產(chǎn)生沖突時(shí),以對(duì)方的分支為準(zhǔn)夫壁,合并代碼

別名

  • git config alias.l log -> 設(shè)置完后 git log 可以用 git l 代替
  • alias l = "git log" l 相當(dāng)于 git log
  • git config --global alias.l log 全局設(shè)置快捷鍵

diff

  • git diff 此命令比較的是工作目錄(Working tree)和暫存區(qū)域快照(index)之間的差異
    也就是修改之后還沒有暫存起來的變化內(nèi)容。
  • git diff HEAD 顯示工作版本(Working tree)和HEAD的差別
  • git diff --cached 比較暫存區(qū)(index)與最新本地版本庫(kù)(本地庫(kù)中最近一次commit的內(nèi)容)
  • git diff [branchA] [branchB] > a.txt 比較分支
  • git diff [<commit-id>] [<commit-id>] 比較兩次commit
  • git diff --cached [<commit-id>] [<path>...] 比較暫存區(qū)與指定commit-id的差異
  • git diff commit-id [<path>...] 比較工作區(qū)與指定commit-id的差異

log

  • git log 查看提交日志
  • git log --graph 圖表形式查看提交日志
  • git log --graph 圖表形式查看提交日志
  • git log --pretty=short 查看提交日志第一行
  • git log 文件名 查看某個(gè)文件的提交日志
  • git log -p <文件名> 查看<文件>提交所帶來的變動(dòng)

分支操作

  • git branch 查看分支
  • git branch -a -a參數(shù) 查看本地和遠(yuǎn)程所有分支的相關(guān)信息(紅色是遠(yuǎn)程)
  • git branch -m master m 重命名分支名字,將master 重命名為m
  • git branch -D 分支名 刪除分支油坝、不管有沒有合并
  • git branch -b 分支名 刪除已經(jīng)合并的分支,未合并的不給刪
  • git checkout 分支名字 切換分支
  • git checkout -b 分支名字 創(chuàng)建分支
  • git checkout a 便可撤銷對(duì)文件a的修改(在沒有 add 的情況下钮莲,比如誤刪除某個(gè)文件)
  • git branch -v 顯示所有本地分支的最后提交記錄
  • git branch -vv 顯示所有本地分支的最后提交記錄以及對(duì)應(yīng)的遠(yuǎn)程分支
  • git branch -u [遠(yuǎn)程分支] 為當(dāng)前分支指定上游遠(yuǎn)程分支
  • git branch -u [遠(yuǎn)程分支] [本地分支] 為本地分支指定上游遠(yuǎn)程分支
  • git branch --track [遠(yuǎn)程分支] 在本地創(chuàng)建一個(gè)和遠(yuǎn)程分支同名的分支并且設(shè)為上游分支
  • git checkout -b [本地分支名稱] [遠(yuǎn)程分支名稱] 本地新建一個(gè)跟蹤遠(yuǎn)程的分支

Note
上游快捷方式
當(dāng)設(shè)置好跟蹤分支后免钻,可以通過 @{upstream} 或 @{u} 快捷方式來引用它。 所以在 master 分支時(shí)并且它正在跟蹤 origin/master 時(shí)崔拥,如果愿意的話可以使用 git merge @{u} 來取代 git merge origin/master

stash

stash 意為將別的分支上未‘提交’的移到一邊极舔,然后回到主分支進(jìn)行操作,因?yàn)閭?cè)分支未修改的東西也會(huì)在主分支上顯示出紅色未修改链瓦,相當(dāng)于工作臺(tái)上將某個(gè)東西放在一邊處理完其他事情后再拿回來

  • git stash list
  • git stash pop
  • git stash clear
  • git stash drop
  • git stash apply

reset

  • git reset --soft 版本id 撤銷修改(代碼不動(dòng)拆魏,版本回歸)
  • git reset HEAD <file>..
  • git reset --hard 版本id 回到id的版本(代碼也回到當(dāng)初)

rebase

  • git rebase {master} 側(cè)分支做了修改,主分支也做了修改慈俯,側(cè)分支想要合并新的主分支 時(shí)候使用此命令
  • git rebase 解決沖突
    在rebase的過程中渤刃,也許會(huì)出現(xiàn)沖突(conflict). 在這種情況,Git會(huì)停止rebase并會(huì)讓你去解決 沖突贴膘;在解決完沖突后卖子,用"git-add"命令去更新這些內(nèi)容的索引(index), 然后,你無需執(zhí)行 git-commit,只要執(zhí)行:
    git rebase --continue 這樣git會(huì)繼續(xù)應(yīng)用(apply)余下的補(bǔ)丁刑峡。 在任何時(shí)候洋闽,你可以用--abort參數(shù)來終止rebase的行動(dòng),并且"mywork" 分支會(huì)回到rebase開始前的狀態(tài)突梦。 git rebase --abort 取消rebase
  • git rebase -i HEAD~2 將上兩次的提交信息合并诫舅,其中選項(xiàng)為drop的操作會(huì)把那個(gè)版本所創(chuàng)建的文件也drop了,s就是把修改信息合并到上一個(gè)pick
    常用的對(duì)commit的操作有5種:
    p, pick = 使用此commit宫患。(p是pick命令的縮寫刊懈,兩種方式均支持)
    r, reword = 使用此commit, 編輯commit message
    e, edit = 使用此commit娃闲,但是不編輯commit message虚汛,保持原有commit message
    s, squash = 使用此commit,但是合并到前一個(gè)commit中去
    f, fixup = 和squash類似皇帮,但是放棄此commit的message
    commit應(yīng)用的順序可以調(diào)整卷哩,rebase操作將從上到下執(zhí)行。
    如果不使用此commit玲献,則刪除此行殉疼。
    如果所有行都被刪除梯浪,則放棄rebase操作。

push

  • git push -u origin master 將當(dāng)期分支的內(nèi)容推送到遠(yuǎn)程origin的master倉(cāng)庫(kù)
  • git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
  • git push --delete origin devel 刪除遠(yuǎn)程分支devel

pull

  • git pull origin 分支名

clone

  • git clone <remote>
  • git clone -b branch <remote>

clean

  • git clean
    -n 顯示 將要 刪除的 文件 和 目錄 ,是一次clean的演習(xí), 告訴你哪些文件會(huì)被刪除. 記住他不會(huì)真正的刪除文件, 只是一個(gè)提醒.
    -f 刪除 文件瓢娜,-df 刪除 文件 和 目錄
  • nah='git reset --hard;git clean -df' 一般這兩個(gè)一起用

    git reset --hard 只影響暫存區(qū)的文件 git clean 影響未添加的文件

git revert

  • 撤銷某次提交內(nèi)容和 git reset 差不多挂洛,但是撤銷的記錄算到一次提交中去

git tag

  • git tag 列出所有的標(biāo)簽
  • git tag -l 'v1.8.5*' 只對(duì) 1.8.5 系列感興趣
  • git tag -a v1.4 -m 'my version 1.4' 在 Git 中創(chuàng)建一個(gè)附注標(biāo)簽是很簡(jiǎn)單的
  • git push origin v1.5 推送一個(gè)標(biāo)簽到遠(yuǎn)程
  • git push origin --tags 推送所有標(biāo)簽
  • git checkout -b version2 v2.0.0 在特定的標(biāo)簽上創(chuàng)建一個(gè)新分支
  • git tag -d v1.0 刪除

git bisect

  • 對(duì)分代碼突然就無法運(yùn)行,不知道那次 commit 提交出錯(cuò)時(shí)使用眠砾,采用二分查找虏劲,一步一步調(diào)試判斷錯(cuò)誤
  • git bisect start 開始
  • git bisect bad
  • git bisect good
  • git bisect reset 回到原來分支

git submodule

  • 當(dāng)項(xiàng)目越來越龐大之后,不可避免的要拆分成多個(gè)子模塊褒颈,我們希望各個(gè)子模塊有獨(dú)立的版本管理柒巫,并且由專門的人去維護(hù),這時(shí)候我們就要用到git的submodule功能谷丸。
  • git clone <repository> --recursive 遞歸的方式克隆整個(gè)項(xiàng)目
  • git submodule add <repository> <path> 添加子模塊
  • git submodule init 初始化子模塊
  • git submodule update 更新子模塊
  • git submodule foreach git pull 拉取所有子模塊
  • 參考1
  • 參考2

刪除git倉(cāng)庫(kù)中的大文件(包括歷史中的大文件)

鏈接

git 打補(bǔ)丁

  • git cherry-pick & git cherry
  • git diff & git apply
  • git format-patch & git am
  • git format-patch 與 diff 區(qū)別 區(qū)別

ssh_key & deploy_key,說白了就相當(dāng)于你有一所大別墅堡掏,SSH key能開別墅中的任何一個(gè)房間。而Deploy key只能開進(jìn)別墅中的一個(gè)單間刨疼。

更多命令參數(shù)請(qǐng)敲 -h 查看

友鏈


此乃筆者筆記中的不完全記錄泉唁,還會(huì)持續(xù)更新 :)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市揩慕,隨后出現(xiàn)的幾起案子亭畜,更是在濱河造成了極大的恐慌,老刑警劉巖迎卤,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴鸵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜗搔,警方通過查閱死者的電腦和手機(jī)劲藐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碍扔,“玉大人瘩燥,你說我怎么就攤上這事秕重〔煌” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵溶耘,是天一觀的道長(zhǎng)二拐。 經(jīng)常有香客問我,道長(zhǎng)凳兵,這世上最難降的妖魔是什么百新? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮庐扫,結(jié)果婚禮上饭望,老公的妹妹穿的比我還像新娘仗哨。我一直安慰自己,他們只是感情好铅辞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布厌漂。 她就那樣靜靜地躺著,像睡著了一般斟珊。 火紅的嫁衣襯著肌膚如雪苇倡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天囤踩,我揣著相機(jī)與錄音旨椒,去河邊找鬼。 笑死堵漱,一個(gè)胖子當(dāng)著我的面吹牛综慎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勤庐,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼寥粹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了埃元?” 一聲冷哼從身側(cè)響起涝涤,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岛杀,沒想到半個(gè)月后阔拳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡类嗤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年糊肠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遗锣。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡货裹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出精偿,到底是詐尸還是另有隱情弧圆,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布笔咽,位于F島的核電站搔预,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叶组。R本人自食惡果不足惜拯田,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甩十。 院中可真熱鬧船庇,春花似錦吭产、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至张弛,卻和暖如春荒典,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吞鸭。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工寺董, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刻剥。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓遮咖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親造虏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子御吞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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

  • 查看、添加漓藕、提交陶珠、刪除、找回享钞,重置修改文件 git help # 顯示command的help git sho...
    Swiftor閱讀 2,120評(píng)論 0 2
  • 配置 首先是配置帳號(hào)信息ssh -T git@github.com # 登陸 github 修改項(xiàng)目中的個(gè)人信息 ...
    guanguans閱讀 742評(píng)論 0 3
  • git init 在本地新建一個(gè)repo,進(jìn)入一個(gè)項(xiàng)目目錄,執(zhí)行g(shù)it init,會(huì)初始化一個(gè)repo,并在當(dāng)...
    後來的後來hugh閱讀 236評(píng)論 0 0
  • Git常用命令總結(jié) git init 在本地新建一個(gè)repo,進(jìn)入一個(gè)項(xiàng)目目錄,執(zhí)行g(shù)it init,會(huì)初始化一個(gè)...
    曾基錕閱讀 254評(píng)論 0 0
  • Git常用命令總結(jié) git init在本地新建一個(gè)repo,進(jìn)入一個(gè)項(xiàng)目目錄,執(zhí)行g(shù)it init,會(huì)初始化一個(gè)r...
    錦魚閱讀 166評(píng)論 0 0