Git常用操作命令收集

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

具體參考gitignore文件屏蔽規則

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

資料參考:

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

說明:Git for Windows 從 1.7.9 版本開始支持使用中文文件、文件夾名稱了,結束了跨平臺中文亂碼的問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,698評論 9 163
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,538評論 1 26
  • 每天乘地鐵看到玻璃里的自己就覺得好歡喜,看到另外的自己,感覺立馬覺得不是孤獨的一個人在這個世界上了!原來有個跟...
    麥芽么么閱讀 484評論 6 5
  • 暑假的時候,一個大二的學弟跟我說他的三門專業課掛掉了,得等到九月份開學的時候進行補考。他特別郁悶,想找我聊一聊。 ...
    花花世界213閱讀 371評論 0 0
  • 什么是好聲音?四個要素:你的聲音清楚嗎?說話稍縱即逝,如果你說話經常被要求重說,那基本上是這個問題。很多朋友是可以...
    聲心合一閱讀 627評論 0 0