Git 使用筆記

1. 安裝

安裝完成后昔脯,需要一步設(shè)置奕翔,在命令行中輸入:

git config --global user.name "name"

git config --global user.email "email@e.com"

如果使用了 git config 命令的 --global 參數(shù)崇裁,則這臺機器上的所有 Git 倉庫都會使用這個配置黄选,可以單獨對某個特定的倉庫設(shè)定不同的用戶名和郵箱地址但汞。

2. 創(chuàng)建版本庫

在需要的目錄下使用

git init 命令

為避免出現(xiàn)問題免猾,包括根目錄在內(nèi)的多級目錄名都不要使用中文疆瑰。

使用上述命令后眉反,會創(chuàng)建一個空的倉庫,并且目錄下會多出一個 .git 目錄穆役,這個目錄是 Git 用來跟蹤管理版本庫的寸五。

3. 添加,提交耿币,查看狀態(tài)梳杏,對比不同

git add
告訴 Git ,把文件添加到倉庫

git commit
把文件提交到倉庫

git commit -m "first commit"
把文件提交到倉庫,并添加說明

git status
查看當(dāng)前倉庫的狀態(tài)

git diff
查看 difference 十性,可以看出做了什么修改

4. 版本回退

git log
顯示從最近到最遠的提交日志

git log --pretty=oneline
用于顯示提交日志叭莫,避免太多內(nèi)容,簡潔顯示

git reset --hard HEAD^
用于版本回退烁试,上一個版本就是 HEAD^雇初,上上個版本就是 HEAD^^,往前一百個版本則可以寫成 HEAD~100

git reset --hard 1094a
版本回退至指定 ID 的版本

git reflog
用來記錄你的每一次命令

5. 工作區(qū)和暫存區(qū)

工作區(qū):就是我們電腦中看到的目錄
版本庫:工作區(qū)中存在的 .git 目錄减响,則是 Git 的版本庫靖诗,版本庫中最重要的就是 stage(或者叫 index) 的==暫存區(qū)==

image

git diff HEAD --readme.txt
可以查看工作區(qū)和版本庫里面最新版本的區(qū)別

每次提交,需要先將修改 add 到暫存區(qū)支示,然后再 commit 到版本庫

6. 撤銷修改

git checkout -- file
可以丟棄工作區(qū)的修改刊橘,此時分兩種情況:

第一種:此文件自修改后還沒放到暫存區(qū),撤銷修改則回到和版本庫一模一樣的狀態(tài)颂鸿;

第二種:此文件已經(jīng)添加到暫存區(qū)后又發(fā)生了修改促绵,則撤銷修改回到添加暫存區(qū)后的狀態(tài)。

總結(jié):就是讓這個文件恢復(fù)到上一次 commit 或 add 的狀態(tài)嘴纺。

git reset HEAD file
可以把暫存區(qū)的修改撤銷掉败晴,重新放回工作區(qū)

7. 刪除文件

如果你工作區(qū)中刪除了某個文件,則工作區(qū)就和版本庫不同了栽渴,通過 git status 則可以查看哪些文件被刪除了尖坤,此時你有兩個選擇:

第一:如果你確實要在版本庫中刪除這個文件,那就用命令 git rm 刪掉闲擦,并且 git commit

第二:如果是誤刪慢味,則可以丟棄工作區(qū)的修改,使用 git checkout -- file 將誤刪的文件恢復(fù)

8. 遠程倉庫

本地 Git 倉庫和 GitHub 倉庫之前傳輸可以通過 SSH 加密進行墅冷。則需要一些設(shè)置:

第一步:創(chuàng)建 SSH Key纯路。 在用戶目錄下,看看有沒有 .ssh 目錄寞忿,如果有驰唬,則看此目錄下有沒有 id_rsa 和 id_rsa.pub 這兩個文件,如果有罐脊,則跳到下一步定嗓。如果沒有蜕琴,則打開 Shell(Windows 下打開 Git Bash),創(chuàng)建 SSH Key:

ssh-keygen -t rsa -C "email"

然后一直回車就可以了萍桌,順利的話,則可以在用戶目錄下看到 .ssh 目錄凌简,并且有 id_rsa 私鑰和 id_rsa.pub 公鑰

第二步:登錄 GitHub 上炎,打開 “Account settings”,“SSH Keys”頁面:然后點擊“Add SSH Key”,填上任意 Title藕施,在 Key 文本框里黏貼 id_rsa.pub 文件的內(nèi)容寇损,點擊 “Add Key”即可看到添加的 Key

假如你有多臺電腦,則可以將你每臺電腦的公鑰添加到 GitHub 上裳食,則就可以在每臺電腦上進行推送了矛市。

關(guān)聯(lián)遠程庫,使用诲祸,命令:

git remote add origin git@server-name:path/repo-name.git

第一次推送本地庫到遠程庫的時候浊吏,由于遠程庫是空的,則用

git push -u origin master

在第一次推送的時候救氯,Git 不但會把本地的 master 分支推送到遠程新的 master 分支找田,還會把本地的 master 分支和遠程的 master 分支關(guān)聯(lián)起來,在以后的推送或者拉取的時候着憨,就可以簡化命令了墩衙。
git push origin master 即可

git clone
克隆遠程倉庫

9. 分支管理

  1. 如果一開始的時候,只有 master 一條分支甲抖,則 master 指向最新的提交漆改,而 HEAD 則指向 master,這樣就確定了當(dāng)前的分支以及當(dāng)前的提交點准谚。
    你每做一次提交籽懦,master 分支就會向前移動一步,隨著不斷提交氛魁,master 分支的線會越來越長暮顺。

    image

  2. 如果此時我們創(chuàng)建一個分支 dev,則 Git 會創(chuàng)建一個指針 dev秀存,指向 master 相同的提交捶码,再把 HEAD 指向 dev,表明當(dāng)前分支為
    image
  3. 如果在此基礎(chǔ)上或链,你又做了一次提交惫恼,則 dev 指針向前移動一步,而 master 指針不變澳盐。


    image
  4. 如果在 dev 上開發(fā)結(jié)束了祈纯,則可以吧 dev 合并到 master 上,Git 上的合并叼耙,最直接的方法就是直接吧 master 指向 dev 的當(dāng)前提交腕窥,即可完成合并。

image

如果將上述過程換成實際操作筛婉,則為:
創(chuàng)建 dev 分支
git checkout -b dev

注:git checkout 命令加上 -b 則表示創(chuàng)建并切換簇爆,相當(dāng)于如下兩條命令:
git branch dev
git checkout dev

使用 git branch 命令可以查看當(dāng)前分支

在 dev 分支上做了修改之后,使用 add ,然后 commit 將修改提交到 dev 分支入蛆,
然后 git checkout master 切換到 master 分支响蓉,使用 git merge dev 將 dev 分支合并到 master 分支上。

如果使用完分支之后哨毁,想要刪除分支枫甲,則可以使用 git branch -d dev 將 dev 分支刪除。

10. 沖突解決

如果主分支 master 和 dev 分支同一文件都做了修改扼褪,然后合并 dev 分支的時候就會出現(xiàn)沖突言秸,


image

解決沖突就是把 Git 合并失敗的文件手動編輯為我們希望的內(nèi)容,再提交迎捺。

用 git log --graph 命令可以看到分支合并圖举畸。

11. 分支管理策略

通常,合并分支時凳枝,如果可能抄沮,Git 會用 Fast forward 模式,但這種模式下岖瑰,刪除分支后叛买,會丟掉分支信息。

如果要強制禁用 Fast forward 模式蹋订,Git 就會在 merge 的時候生成新的 commit率挣,這樣就可以從分支歷史上看到分支信息。

git merge --no-ff -m "merge with no-ff" dev

實際開發(fā)中露戒,我們應(yīng)該遵循:

  1. master 分支應(yīng)該是非常穩(wěn)定的椒功,也就是用來發(fā)布新版本的,平時不能在上面干活智什。
  2. 平時干活都在 dev 分支上动漾,dev 分支是及其不穩(wěn)定的,當(dāng)需要發(fā)布的時候荠锭,把 dev 分支合并到 master 上旱眯,在 master 分支發(fā)布版本。
  3. 你和你的同事每個人都在 dev 上干活证九,每個人都有自己的分支删豺,時不時往 dev 分支上合并就可以了。


    image

12. Bug 分支

如果你在分支 dev 上進行開發(fā)的時候愧怜,測試部門測試出 master 上有 bug呀页,需要你立即修復(fù)一下,而你當(dāng)前還在 dev 上開發(fā)叫搁,沒有進行提交赔桌,因為工作只進行了一般,還沒法提交渴逻,則此時就可以使用

git stash
將當(dāng)前工作現(xiàn)場“儲存”起來疾党,等以后恢復(fù)現(xiàn)場繼續(xù)工作。

此時你可以切換到 master 上惨奕,然后創(chuàng)建一個修復(fù) bug 的臨時分支雪位,然后修復(fù)后,add 梨撞、commit 到臨時分支上雹洗,然后在 master 上 merge 一下。

修復(fù)完 bug 后卧波,你切換到 dev 分支上繼續(xù)干活时肿,你之前將內(nèi)容“儲存”起來了,你有兩種方式可以將它恢復(fù):

  1. 使用 git stash apply 恢復(fù)港粱,但是恢復(fù)之后螃成,stash 內(nèi)容并不刪除,你需要繼續(xù)使用 git stash drop 來刪除查坪。
  2. 使用 git stash pop 寸宏,恢復(fù)的同時也可以把 stash 內(nèi)容刪除了。

使用 git stash list 可以查看目前所有的 stash 內(nèi)容偿曙。

使用 git stash apply stash@{0} 可以恢復(fù)指定 stash 內(nèi)容氮凝。、

如果要丟棄一個沒有被合并過的分支望忆,通過:
git branch -D name

13. 多人協(xié)作

遠程倉庫的默認名稱是 origin
查看遠程庫的信息罩阵,可使用:
git remote 或者使用 git remote -v 顯示更詳細的信息。

推送分支:
git push origin master
推送其他分支
git push origin dev

并不是所有分支都要推送到遠程倉庫启摄,如果選擇呢永脓?

  1. master 分支是主分支,因此要時刻與遠程同步
  2. dev 分支是開發(fā)分支鞋仍,所有的成員都要在上面進行工作常摧,所以也需要與遠程同步
  3. bug 分支只用于本地修復(fù) bug,沒必要推送到遠程分支威创,除非有需要記錄修復(fù)了多少個 bug
抓取分支

創(chuàng)建本地分支
git checkout -b dev origin/dev
本地分支和遠程分支建立鏈接關(guān)系
git branch --set-upstream-to <branch-name> origin/<branch-name>

注:
多人協(xié)作工作模式:

  1. 首先落午,可以試圖用 git push origin <branch-name> 推送到遠程分支
  2. 如果推送失敗,則因為遠程倉庫比你的本地倉庫新肚豺,則需要先進行 git pull 進行合并
  3. 如果合并沖突溃斋,則解決沖突,并在本地提交
  4. 沒有沖突或者解決完沖突后吸申,在使用 git push origin <branch-name> 進行推送
  5. 如果 git pull 的時候提示 no tracking information梗劫,則說明本地分支和遠程分支沒有建立聯(lián)系享甸,則用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>

14. 標(biāo)簽管理

Git 中打標(biāo)簽,切換到指定分支梳侨,執(zhí)行:
git tag v1.0
使用 git tag 可以查看所有標(biāo)簽
git tag v0.9 f43434
可以對指定的 id 打 tag

git tag -a v0.1 -m "message" f3434
創(chuàng)建帶有說明的標(biāo)簽 -a 指定標(biāo)簽名稱
-m 指定說明信息

git tag -d v0.1 可以刪除錯誤標(biāo)簽

git push origin v1.0 可以將指定的 tag 推送到遠程倉庫

git push origin --tags 可以將所有的 tag 一次性推送到遠程倉庫

git push origin :refs/tags/v0.9 可以將 tag 從遠程刪除

15. 一個本地庫同時關(guān)聯(lián)多個遠程庫

git remote rm origin
先刪除已關(guān)聯(lián)的名為 origin 的遠程庫

git remote add github git@github.com:keven/learn.git
關(guān)聯(lián) Github 的遠程倉庫

git remote add gitee git@gitee.com:keven/learn.git
關(guān)聯(lián)碼云的遠程庫

git push github master
git push gitee master
推送到遠程

16. 自定義配置 Git

讓 Git 命令顯示顏色
git config --global color.ui true

忽略特殊文件
在 Git 目錄下新建 .gitignore 文件蛉威,然后把需要忽略的文件添加進去即可∽卟福可以參考 GitHub 地址:https://github.com/github/gitignore

.gitignore 文件本身要放到版本庫中蚯嫌,并且可以對 .gitignore 做版本管理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丙躏,一起剝皮案震驚了整個濱河市择示,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晒旅,老刑警劉巖栅盲,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異废恋,居然都是意外死亡剪菱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門拴签,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孝常,“玉大人,你說我怎么就攤上這事蚓哩」咕模” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵岸梨,是天一觀的道長喜颁。 經(jīng)常有香客問我,道長曹阔,這世上最難降的妖魔是什么半开? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮赃份,結(jié)果婚禮上寂拆,老公的妹妹穿的比我還像新娘。我一直安慰自己抓韩,他們只是感情好纠永,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谒拴,像睡著了一般尝江。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上英上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天炭序,我揣著相機與錄音啤覆,去河邊找鬼。 笑死惭聂,一個胖子當(dāng)著我的面吹牛窗声,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彼妻,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嫌佑,長吁一口氣:“原來是場噩夢啊……” “哼豆茫!你這毒婦竟也來了侨歉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤揩魂,失蹤者是張志新(化名)和其女友劉穎幽邓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體火脉,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡牵舵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了倦挂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畸颅。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖方援,靈堂內(nèi)的尸體忽然破棺而出没炒,到底是詐尸還是另有隱情,我是刑警寧澤犯戏,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布送火,位于F島的核電站,受9級特大地震影響先匪,放射性物質(zhì)發(fā)生泄漏种吸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一呀非、第九天 我趴在偏房一處隱蔽的房頂上張望坚俗。 院中可真熱鬧,春花似錦岸裙、人聲如沸坦冠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辙浑。三九已至,卻和暖如春拟糕,著一層夾襖步出監(jiān)牢的瞬間判呕,已是汗流浹背倦踢。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侠草,地道東北人辱挥。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像边涕,于是被迫代替她去往敵國和親晤碘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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