git命令大全

[TOC]

基本概念

  • master指針:指向最新的提交

資料

http://sfault-image.b0.upaiyun.com/37/92/37923f2478edc5709b36562b26c9e008


全局配置

$ git config --global user.name "kk"
$ git config --global user.email "xxx@gmail.com"

  • 編輯模式查看全局設置:
    git config --global -e

  • 列表形式查看全局設置:
    git config --global -l


使用GitHub時,在本地創(chuàng)建SSH Key

ssh-keygen -t rsa -C "youremail@example.com"

  • 如果一切順利的話,可以在用戶主目錄里(~/.ssh)找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

  • 第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:
    然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容


遠程倉庫

  • 克隆遠程倉庫到本地
    git clone git@github.com:michaelliao/gitskills.git

  • 克隆遠程倉庫某個分支到本地
    git clone -b <branch> <remote_repo>
    例如: git clone -b 指定的分支名字

  • 給本地倉庫指定遠程倉庫

  1. 關聯(lián)GitHub倉庫:
    git remote add origin git@github.com:michaelliao/learngit.git

  2. 顯示遠程倉庫:
    git remote show origin
    第一次推送使用:
    git push -u origin 分支名稱
    之后推送使用:
    git push origin maste

  3. 查看遠程倉庫地址
    git remote -v

  4. 取消關聯(lián)遠程倉庫
    git remote rm origin


初始化git倉庫

git init
git add .
git commit -m “xxxx"


文件操作

刪除所有文件
git rm * -r
刪除文件夾
git rm filename -r
忽略無需版本控制的文檔
echo “*.txt” > .gitignore


日志

查看commit日志
git reflog

git log


分支管理

  • 查看當前所在分支
    git branch -a
  • 切換到某個分支
    git checkout 分支名字

  • 創(chuàng)建本地分支并切換到創(chuàng)建的分支:
    git checkout -b your_branch
  • 提交該分支到遠程倉庫
    git push origin dev

  • 追蹤遠程分支
    git branch --track release_2.3.0 origin/HEAD:refs/for/release_2.3.0
  • 將本地分支push到遠程分支,(遠程會自動創(chuàng)建your_branch分支),并關聯(lián)本地分支與遠程分支
    git push -u origin your_branch
  • 刪除遠程分支
    git push origin --delete <branchName>
  • 刪除本地分支
    git branch -d your_branch

本地提交回滾

  1. 先重置本地在上次提交之后的修改(如果需要的話)
    git checkout *.m
  2. 重置為遠程倉庫的最新版本
    soft表示本地的修改還在本地文件中,不加的話那么本地的修改也沒了
    git reset HEAD^ --soft

拉取遠程代碼時沖突

  1. 保存本地修改到暫存區(qū)
    git stash
  2. 拉取遠程代碼
    git pull
  3. 將暫存區(qū)內(nèi)容恢復到本地,有沖突時先解決沖突
    git stash pop

git stash 的使用

  • 列出所有暫時保存的工作
    git stash list
  • 恢復某個暫時保存的工作

git stash apply stash@{1}

  • 保存stash時設置stash名稱
    git stash save "my_stash"

  • 丟棄最近一次stash的文件
    git stash drop

合并某次提交 merge a specific commit in Git

git cherry-pick d42c389f


git merge 后 push 到 Gerrit 失敗,提示 no new changes

  • git merge 的時候,加上 --no-ff 參數(shù),是為了讓它生成一個新的 commit,這樣就可以提交了~(不過生成的 gerrit change 是看不到改動信息的)

tag 操作

  • 查看tag
    git tag
  • 創(chuàng)建 本地 tag
    git tag 1.0.0
    或者
    git tag -m "first release" 0.1.0
  • 推送 本地 tag 到遠程服務器
    git push origin 1.0.0
  • 或者推送所有tags到遠程服務器
    git push --tags
  • 刪除本地 tag
    git tag -d 1.0.0
  • 刪除遠程 tag
  1. 先刪除本地 tag
    git tag -d 1.0.0
  2. 然后push
    git push origin --delete tag 1.0.0

fatal: remote origin already exists.錯誤解決

  1. 先刪除遠程 Git 倉庫

git remote rm origin
2 再添加遠程 Git 倉庫

git remote add origin git@github.com:FBing/Java-code-generator

git ignore

  • 創(chuàng)建.gitignore文件
    touch .gitignore
    忽略規(guī)則示例
# 這是注釋行,將被忽略
*.a       # 忽略所有以.a為擴展名的文件    
!lib.a    # 但是名為lib.a的文件或目錄不要忽略,即使前面設置了對*.a的忽略
/TODO     # 只忽略此目錄下的TODO文件,子目錄中的TODO文件不忽略
build/    # 忽略所有build目錄下的文件,但如果是名為build的文件則不忽略
doc/*.txt # 忽略文件如doc/notes.txt,但是文件如doc/server/arch.txt不忽略

例如忽略下圖的GPUImage.framework框架

SystemVedio/GPUImage/GPUImage.framework
6218590.png

只追蹤某幾個文件

#忽略所有文件,注意放在開頭
/*
#除src文件夾外
!/src
#除bin文件夾外
!/bin 
#總的效果就是git只跟蹤src和bin兩個文件夾

merge 與 rebase 的區(qū)別

參考:https://www.zhihu.com/question/36509119/answer/131513261

搞清楚這個問題首先要搞清楚merge和rebase背后的含義。

merge:會產(chǎn)生一次合并提交

先看merge,官方文檔給的說明是:
git-merge - Join two or more development histories together

顧名思義,當你想要兩個分支交匯的時候應該使用merge。
根據(jù)官方文檔給的例子,是master merge topic,如圖:
A---B---C topic
/
D---E---F---G---H master
然而在實踐中,在H這個commit上的merge經(jīng)常會出現(xiàn)merge conflict。為了避免解決沖突的時候引入一些不必要的問題,工程中一般都會規(guī)定no conflict merge。比如你在github上發(fā)pull request,如果有conflict就會禁止merge。

所以才會有題主問的問題:在當前的topic分支,想要引入master分支的F、G commit上的內(nèi)容以避免merge conflict,方便最終合并到master。

這種情況下用merge當然是一個選項。用merge代表了topic分支與master分支交匯,并解決了所有合并沖突。然而merge的缺點是引入了一次不必要的history join。如圖:
A--B--C-X topic
/ /
D---E---F---G---H master
其實仔細想一下就會發(fā)現(xiàn),在引入master分支的F、G commit這個問題上,我們并沒有要求兩個分支必須進行交匯(join),我們只是想避免最終的merge conflict而已。

rebase:將其他分支的內(nèi)容整合到當前分支,改變當前分支branch out的位置

rebase是另一個選項。rebase的含義是改變當前分支branch out的位置。這個時候進行rebase其實意味著,將topic分支branch out的位置從E改為G,如圖:
A---B---C topic
/
D---E---F---G master
在這個過程中會解決引入F、G導致的沖突,同時沒有多余的history join。但是rebase的缺點是,改變了當前分支branch out的節(jié)點。如果這個信息對你很重要的話,那么rebase應該不是你想要的。rebase過程中也會有多次解決同一個地方的沖突的問題,不過可以用squash之類的選項解決。個人并不認為這個是rebase的主要問題。

綜上,其實選用merge還是rebase取決于你到底是以什么意圖來避免merge conflict。實踐上個人還是偏愛rebase。一個是因為branch out節(jié)點不能改變的情況實在太少。另外就是頻繁從master merge導致的冗余的history join會提高所有人的認知成本。

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

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

  • git branch 查看本地所有分支 git status 查看當前狀態(tài) git commit 提交 git b...
    猿萬閱讀 5,088評論 1 45
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,532評論 1 26
  • 1,查看所有遠程分支:%git branch -r 2, 拉取遠程分支并創(chuàng)建本地分支git checkout -...
    will666閱讀 2,085評論 0 18
  • 初中時期的我,很不懂事,甚至厭倦父母對我的管教。我開始和他們爭吵,爭吵過后我非但沒有愧疚反而有一絲爽快。這是我之...
    淺沫or閱讀 199評論 0 2
  • 最后一個巫師獵人 長得像反派的最后果然還是反派 活得長就是比什么都好 其實看到什么 無論看到什么 想到的還是一樣的
    秩序守護者閱讀 118評論 0 0