Git常用操作命令收集

  1. 遠(yuǎn)程倉(cāng)庫(kù)相關(guān)命令
檢出倉(cāng)庫(kù):$ git clone git://github.com/jquery/jquery.git
查看遠(yuǎn)程倉(cāng)庫(kù):$ git remote -v
添加遠(yuǎn)程倉(cāng)庫(kù):$ git remote add [name] [url]
刪除遠(yuǎn)程倉(cāng)庫(kù):$ git remote rm [name]
修改遠(yuǎn)程倉(cāng)庫(kù):$ git remote set-url --push [name] [newUrl]
拉取遠(yuǎn)程倉(cāng)庫(kù):$ git pull [remoteName] [localBranchName]
推送遠(yuǎn)程倉(cāng)庫(kù):$ git push [remoteName] [localBranchName]
強(qiáng)制推送更改:$ git push --force origin master
如果想把本地的某個(gè)分支test提交到遠(yuǎn)程倉(cāng)庫(kù),并作為遠(yuǎn)程倉(cāng)庫(kù)的master分支,或者作為另外一個(gè)名叫test的分支,如下:
$ git push origin test:master // 提交本地test分支作為遠(yuǎn)程的master分支
$ git push origin test:test // 提交本地test分支作為遠(yuǎn)程的test分支
  1. 分支(branch)操作相關(guān)命令
查看本地分支:$ git branch
查看遠(yuǎn)程分支:$ git branch -r (如果還是看不到就先git fetch origin先)
創(chuàng)建本地分支:$ git branch [name] ----注意新分支創(chuàng)建后不會(huì)自動(dòng)切換為當(dāng)前分支
切換分支:$ git checkout [name]
創(chuàng)建新分支并立即切換到新分支:$ git checkout -b [name]
直接檢出遠(yuǎn)程分支:$ git checkout -b [name] [remoteName] (如:git checkout -b myNewBranch origin/dragon)
刪除分支:$ git branch -d [name] ---- -d選項(xiàng)只能刪除已經(jīng)參與了合并的分支,對(duì)于未有合并的分支是無(wú)法刪除的则北。如果想強(qiáng)制刪除一個(gè)分支
,可以使用-D選項(xiàng)合并分支:$ git merge [name] ----將名稱為[name]的分支與當(dāng)前分支合并
合并最后的2個(gè)提交:$ git rebase -i HEAD~2 ---- 數(shù)字2按需修改即可(如果需提交到遠(yuǎn)端$ git push -f origin master 慎用!)
創(chuàng)建遠(yuǎn)程分支(本地分支push到遠(yuǎn)程):$ git push origin [name]
刪除遠(yuǎn)程分支:$ git push origin :heads/[name] 或 $ git push origin :[name]
修改分支名稱:git branch -m <old_branch_name> <new_branch_name>
創(chuàng)建空的分支:(執(zhí)行命令之前記得先提交你當(dāng)前分支的修改,否則會(huì)被強(qiáng)制刪干凈沒(méi)得后悔)
$ git symbolic-ref HEAD refs/heads/[name]
$ rm .git/index
$ git clean -fdx
  1. 版本(tag)操作相關(guān)命令
查看版本:$ git tag
創(chuàng)建版本:$ git tag [name]
刪除版本:$ git tag -d [name]
查看遠(yuǎn)程版本:$ git tag -r
創(chuàng)建遠(yuǎn)程版本(本地版本push到遠(yuǎn)程):$ git push origin [name]
刪除遠(yuǎn)程版本:$ git push origin :refs/tags/[name]
合并遠(yuǎn)程倉(cāng)庫(kù)的tag到本地:$ git pull origin --tags
上傳本地tag到遠(yuǎn)程倉(cāng)庫(kù):$ git push origin --tags
創(chuàng)建帶注釋的tag:$ git tag -a [name] -m 'yourMessage'
  1. 子模塊(submodule)相關(guān)操作命令
添加子模塊:$ git submodule add [url] [path]
如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模塊:$ git submodule init ----只在首次檢出倉(cāng)庫(kù)時(shí)運(yùn)行一次就行
更新子模塊:$ git submodule update ----每次更新或切換分支后都需要運(yùn)行一下
刪除子模塊:(分4步走哦)
1) $ git rm --cached [path]
2) 編輯“.gitmodules”文件,將子模塊的相關(guān)配置節(jié)點(diǎn)刪除掉
3) 編輯“ .git/config”文件,將子模塊的相關(guān)配置節(jié)點(diǎn)刪除掉
4) 手動(dòng)刪除子模塊殘留的目錄
  1. 忽略一些文件掀亥、文件夾不提交
在倉(cāng)庫(kù)根目錄下創(chuàng)建名稱為“.gitignore”的文件,寫(xiě)入不需要的文件夾名或文件,每個(gè)元素占一行即可,如
target
bin
*.db

具體參考gitignore文件屏蔽規(guī)則

  1. 后悔藥
刪除當(dāng)前倉(cāng)庫(kù)內(nèi)未受版本管理的文件:$ git clean -f
恢復(fù)倉(cāng)庫(kù)到上一次的提交狀態(tài):$ git reset --hard
回退所有內(nèi)容到上一個(gè)版本:$ git reset HEAD^
回退a.py這個(gè)文件的版本到上一個(gè)版本:$ git reset HEAD^ a.py
回退到某個(gè)版本:$ git reset 057d
將本地的狀態(tài)回退到和遠(yuǎn)程的一樣:$ git reset –hard origin/master
向前回退到第3個(gè)版本:$ git reset –soft HEAD~3
修改最后的提交日志:$ git commit --amend
  1. Git一鍵推送多個(gè)遠(yuǎn)程倉(cāng)庫(kù)
編輯本地倉(cāng)庫(kù)的.git/config文件:
[remote "all"]
  url = git@github.com:dragon/test.git
  url = git@gitcafe.com:dragon/test.git
這樣,使用git push all即可一鍵Push到多個(gè)遠(yuǎn)程倉(cāng)庫(kù)中。
  1. 緩存認(rèn)證信息
$ git config credential.helper cache
  1. 查看提交日志
》查看文件中的每一行的作者、最新的變更提交和提交時(shí)間
$ git blame [fileName]
》查看倉(cāng)庫(kù)歷史記錄
有三個(gè)應(yīng)該知道的選項(xiàng)邻梆。
--oneline - 壓縮模式,在每個(gè)提交的旁邊顯示經(jīng)過(guò)精簡(jiǎn)的提交哈希碼和提交信息,以一行顯示奔誓。
--graph - 圖形模式,使用該選項(xiàng)會(huì)在輸出的左邊繪制一張基于文本格式的歷史信息表示圖。如果你查看的是單個(gè)分支的歷史記錄的話,該選項(xiàng)無(wú)效站粟。
--all - 顯示所有分支的歷史記錄
把這些選項(xiàng)組合起來(lái)之后如下:
使用 $ git log --oneline --graph --name-status 既可以看到簡(jiǎn)介的日志信息,也可以看到改了哪些文件,一舉兩得.
  1. 有選擇的合并 - 這個(gè)功能最贊,沒(méi)有之一
cherry-pick 可以從不同的分支中撿出一個(gè)單獨(dú)的commit,并把它和你當(dāng)前的分支合并黍图。如果你以并行方式在處理兩個(gè)或以上分支,你可能會(huì)發(fā)現(xiàn)
一個(gè)在全部分支中都有的bug。如果你在一個(gè)分支中解決了它,你可以使用cherry-pick命令把它c(diǎn)ommit到其它分支上去,而不會(huì)弄亂其他的文件或commit奴烙。
$ git cherry-pick [commitHash]
  1. Stash未提交的更改
正在修改某個(gè)bug或者某個(gè)特性,又突然被要求展示工作助被。而現(xiàn)在所做的工作還不足以提交,這個(gè)階段還無(wú)法進(jìn)行展示(不能回到更改之前)。在這種
情況下, git stash可以幫到忙了切诀。stash在本質(zhì)上會(huì)取走所有的變更并存儲(chǔ)它們以備將來(lái)使用揩环。
$ git stash
檢查stash列表:$ git stash list
想解除stash并且恢復(fù)未提交的變更,就進(jìn)行apply stash:$ git stash apply
如果只想留有余地進(jìn)行apply stash,給apply添加特定的標(biāo)識(shí)符:$ git stash apply stash@{0}
  1. 多次修改后拆分提交 - 暫存文件的部分改動(dòng)
一般情況下,創(chuàng)建一個(gè)基于特性的提交是比較好的做法,意思是每次提交都必須代表一個(gè)新特性的產(chǎn)生或者是一個(gè)bug的修復(fù)。如果你修復(fù)了兩個(gè)bug,或是添加了多個(gè)新特性但是卻沒(méi)有提交這些變化會(huì)怎樣呢?在這種情況下,你可以把這些變化放在一次提交中幅虑。但更好的方法是把文件暫存(Stage)然后分別提交丰滑。
例如你對(duì)一個(gè)文件進(jìn)行了多次修改并且想把他們分別提交。這種情況下,可以在 add 命令中加上 -p 參數(shù)
$ git add -p [fileName]
  1. 壓縮多個(gè)Commit
用rebase命令把多個(gè)commit壓縮成一個(gè):
git rebase -i HEAD~[number_of_commits]
如果你想要壓縮最后兩個(gè)commit,你需要運(yùn)行下列命令:
git rebase -i HEAD~2
Docs: [http://git-scm.com/book/en/v2/Git-Branching-Rebasing](http://git-scm.com/book/en/v2/Git-Branching-Rebasing)
  1. 差異查看
$ git diff --name-status HEAD~2 HEAD~3 <-- 獲得兩個(gè)版本間所有變更的文件列表
$ git diff HEAD HEAD~1 <-- 查看最近兩個(gè)提交之間的差異
$ git diff HEAD HEAD~2 <-- 查看第1個(gè)與第3個(gè)提交之間的差異
^ - 代表父提交,^n 表示第n個(gè)父提交,^相當(dāng)于^1 git尋根:^和~的區(qū)別 - 分析得很到位
~ - 代表連續(xù)的提交,~n相當(dāng)于連續(xù)的第n個(gè)提交
$ git diff master..test <-- 比較兩個(gè)分支之間的差異
$ git diff master...test <-- 比較master倒庵、test的共有父分支和 test 分支之間的差異
$ git diff test <-- 比較當(dāng)前工作目錄與 test 分支的差異
$ git diff HEAD <-- 比較當(dāng)前工作目錄與上次提交的差異
$ git diff HEAD -- ./lib <-- 比較當(dāng)前工作目錄下的lib目錄與上次提交的差異
$ git diff --stat <-- 統(tǒng)計(jì)一下有哪些文件被改動(dòng),有多少行被改動(dòng)
$ git diff --cached <-- 查看下次提交時(shí)要提交的內(nèi)容(staged,添加到索引中)
  1. Git for Windows 中文亂碼問(wèn)題 (1.9.4-preview20140611)
》git log 顯示的文件名亂碼
執(zhí)行 "git config –global core.quotepath false"可以解決之褒墨。core.quotepath設(shè)為false,就不會(huì)對(duì)0×80以上的字符進(jìn)行quote,中文就
》ls命令顯示的中文名亂碼
改用"ls --show-control-chars"命令代替單純的"ls"命令即可炫刷。
或者編輯.../Git/etc/git-completion.bash,新增一行 alias ls="ls –show-control-chars"

資料參考:

Git Submodule 的認(rèn)識(shí)與正確使用!
如何保持在 Git Submodule 代碼的開(kāi)放和私有共存
Git Submodule Tutorial
刪除 git submodule
pages.github.com
Git獲取遠(yuǎn)程分支
Git for Windows Unicode Support
Git一鍵推送多個(gè)遠(yuǎn)程倉(cāng)庫(kù)
圖解Git
使用git合并多個(gè)提交
git:多個(gè)commit合并提交
git rebase (本地分支合并) / git rebase (本地與遠(yuǎn)程同步)
git merge 和git rebase
版本控制系統(tǒng) Git 精要
10 個(gè)很有用的高級(jí) Git 命令
git修改歷史提交
10 個(gè)迅速提升你 Git 水平的提示
git尋根:^和~的區(qū)別 - 分析得很到位
比較提交 - Git Diff

說(shuō)明:Git for Windows 從 1.7.9 版本開(kāi)始支持使用中文文件、文件夾名稱了,結(jié)束了跨平臺(tái)中文亂碼的問(wèn)題郁妈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柬唯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子圃庭,更是在濱河造成了極大的恐慌锄奢,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剧腻,死亡現(xiàn)場(chǎng)離奇詭異拘央,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)书在,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)灰伟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人儒旬,你說(shuō)我怎么就攤上這事栏账。” “怎么了栈源?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵挡爵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我甚垦,道長(zhǎng)茶鹃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任艰亮,我火速辦了婚禮闭翩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迄埃。我一直安慰自己疗韵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布侄非。 她就那樣靜靜地躺著蕉汪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彩库。 梳的紋絲不亂的頭發(fā)上肤无,一...
    開(kāi)封第一講書(shū)人閱讀 49,879評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音骇钦,去河邊找鬼宛渐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窥翩。 我是一名探鬼主播业岁,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寇蚊!你這毒婦竟也來(lái)了笔时?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仗岸,失蹤者是張志新(化名)和其女友劉穎允耿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扒怖,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡较锡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盗痒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚂蕴。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖俯邓,靈堂內(nèi)的尸體忽然破棺而出骡楼,到底是詐尸還是另有隱情,我是刑警寧澤稽鞭,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布鸟整,位于F島的核電站,受9級(jí)特大地震影響川慌,放射性物質(zhì)發(fā)生泄漏吃嘿。R本人自食惡果不足惜祠乃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一梦重、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亮瓷,春花似錦琴拧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至除师,卻和暖如春沛膳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汛聚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工锹安, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓叹哭,卻偏偏與公主長(zhǎng)得像忍宋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子风罩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

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

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,645評(píng)論 9 163
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,458評(píng)論 1 26
  • 每天乘地鐵看到玻璃里的自己就覺(jué)得好歡喜糠排,看到另外的自己,感覺(jué)立馬覺(jué)得不是孤獨(dú)的一個(gè)人在這個(gè)世界上了超升!原來(lái)有個(gè)跟...
    麥芽么么閱讀 481評(píng)論 6 5
  • 暑假的時(shí)候室琢,一個(gè)大二的學(xué)弟跟我說(shuō)他的三門(mén)專業(yè)課掛掉了云石,得等到九月份開(kāi)學(xué)的時(shí)候進(jìn)行補(bǔ)考。他特別郁悶研乒,想找我聊一聊汹忠。 ...
    花花世界213閱讀 360評(píng)論 0 0
  • 什么是好聲音?四個(gè)要素:你的聲音清楚嗎雹熬?說(shuō)話稍縱即逝宽菜,如果你說(shuō)話經(jīng)常被要求重說(shuō),那基本上是這個(gè)問(wèn)題竿报。很多朋友是可以...
    聲心合一閱讀 578評(píng)論 0 0