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
顯示從最近到最遠(yuǎn)的提交日志

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. 遠(yuǎn)程倉庫

本地 Git 倉庫和 GitHub 倉庫之前傳輸可以通過 SSH 加密進(jìn)行。則需要一些設(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 上,則就可以在每臺電腦上進(jìn)行推送了。

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

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

第一次推送本地庫到遠(yuǎn)程庫的時候,由于遠(yuǎn)程庫是空的,則用

git push -u origin master

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

git clone
克隆遠(yuǎn)程倉庫

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 上進(jìn)行開發(fā)的時候,測試部門測試出 master 上有 bug,需要你立即修復(fù)一下,而你當(dāng)前還在 dev 上開發(fā),沒有進(jìn)行提交,因為工作只進(jìn)行了一般,還沒法提交,則此時就可以使用

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é)作

遠(yuǎn)程倉庫的默認(rèn)名稱是 origin
查看遠(yuǎn)程庫的信息,可使用:
git remote 或者使用 git remote -v 顯示更詳細(xì)的信息。

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

并不是所有分支都要推送到遠(yuǎn)程倉庫,如果選擇呢?

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

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

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

  1. 首先,可以試圖用 git push origin <branch-name> 推送到遠(yuǎn)程分支
  2. 如果推送失敗,則因為遠(yuǎn)程倉庫比你的本地倉庫新,則需要先進(jìn)行 git pull 進(jìn)行合并
  3. 如果合并沖突,則解決沖突,并在本地提交
  4. 沒有沖突或者解決完沖突后,在使用 git push origin <branch-name> 進(jìn)行推送
  5. 如果 git pull 的時候提示 no tracking information,則說明本地分支和遠(yuǎn)程分支沒有建立聯(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 推送到遠(yuǎn)程倉庫

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

git push origin :refs/tags/v0.9 可以將 tag 從遠(yuǎn)程刪除

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

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

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

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

git push github master
git push gitee master
推送到遠(yuǎn)程

16. 自定義配置 Git

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

忽略特殊文件
在 Git 目錄下新建 .gitignore 文件,然后把需要忽略的文件添加進(jìn)去即可??梢詤⒖?GitHub 地址:https://github.com/github/gitignore

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容