Git命令大全

1. git config

配置 Git 的相關(guān)參數(shù)。

Git 一共有3個(gè)配置文件:

  1. 倉(cāng)庫(kù)級(jí)的配置文件:在倉(cāng)庫(kù)的 .git/.gitconfig,該配置文件只對(duì)所在的倉(cāng)庫(kù)有效。
  2. 全局配置文件:Mac 系統(tǒng)在 ~/.gitconfig,Windows 系統(tǒng)在 C:\Users<用戶(hù)名>.gitconfig。
  3. 系統(tǒng)級(jí)的配置文件:在 Git 的安裝目錄下(Mac 系統(tǒng)下安裝目錄在 /usr/local/git)的 etc 文件夾中的 gitconfig。
# 查看配置信息
# --local:倉(cāng)庫(kù)級(jí),--global:全局級(jí),--system:系統(tǒng)級(jí)
$ git config <--local | --global | --system> -l

# 查看當(dāng)前生效的配置信息
$ git config -l

# 編輯配置文件
# --local:倉(cāng)庫(kù)級(jí),--global:全局級(jí),--system:系統(tǒng)級(jí)
$ git config <--local | --global | --system> -e

# 添加配置項(xiàng)
# --local:倉(cāng)庫(kù)級(jí),--global:全局級(jí),--system:系統(tǒng)級(jí)
$ git config <--local | --global | --system> --add <name> <value>

# 獲取配置項(xiàng)
$ git config <--local | --global | --system> --get <name>

# 刪除配置項(xiàng)
$ git config <--local | --global | --system> --unset <name>

# 配置提交記錄中的用戶(hù)信息
$ git config --global user.name <用戶(hù)名>
$ git config --global user.email <郵箱地址>

# 更改Git緩存區(qū)的大小
# 如果提交的內(nèi)容較大,默認(rèn)緩存較小,提交會(huì)失敗
# 緩存大小單位:B,例如:524288000(500MB)
$ git config --global http.postBuffer <緩存大小>

# 調(diào)用 git status/git diff 命令時(shí)以高亮或彩色方式顯示改動(dòng)狀態(tài)
$ git config --global color.ui true

# 配置可以緩存密碼,默認(rèn)緩存時(shí)間15分鐘
$ git config --global credential.helper cache

# 配置密碼的緩存時(shí)間
# 緩存時(shí)間單位:秒
$ git config --global credential.helper 'cache --timeout=<緩存時(shí)間>'

# 配置長(zhǎng)期存儲(chǔ)密碼
$ git config --global credential.helper store

2. git clone

從遠(yuǎn)程倉(cāng)庫(kù)克隆一個(gè)版本庫(kù)到本地。

# 默認(rèn)在當(dāng)前目錄下創(chuàng)建和版本庫(kù)名相同的文件夾并下載版本到該文件夾下
$ git clone <遠(yuǎn)程倉(cāng)庫(kù)的網(wǎng)址>

# 指定本地倉(cāng)庫(kù)的目錄
$ git clone <遠(yuǎn)程倉(cāng)庫(kù)的網(wǎng)址> <本地目錄>

# -b 指定要克隆的分支,默認(rèn)是master分支
$ git clone <遠(yuǎn)程倉(cāng)庫(kù)的網(wǎng)址> -b <分支名稱(chēng)> <本地目錄>

3. git init

初始化項(xiàng)目所在目錄,初始化后會(huì)在當(dāng)前目錄下出現(xiàn)一個(gè)名為 .git 的目錄。


# 初始化本地倉(cāng)庫(kù),在當(dāng)前目錄下生成 .git 文件夾
$ git init

4. git status

查看本地倉(cāng)庫(kù)的狀態(tài)。


# 查看本地倉(cāng)庫(kù)的狀態(tài)
$ git status

# 以簡(jiǎn)短模式查看本地倉(cāng)庫(kù)的狀態(tài)
# 會(huì)顯示兩列,第一列是文件的狀態(tài),第二列是對(duì)應(yīng)的文件
# 文件狀態(tài):A 新增,M 修改,D 刪除,?? 未添加到Git中
$ git status -s

5. git remote

操作遠(yuǎn)程庫(kù)。


# 列出已經(jīng)存在的遠(yuǎn)程倉(cāng)庫(kù)
$ git remote

# 列出遠(yuǎn)程倉(cāng)庫(kù)的詳細(xì)信息,在別名后面列出URL地址
$ git remote -v
$ git remote --verbose

# 添加遠(yuǎn)程倉(cāng)庫(kù)
$ git remote add <遠(yuǎn)程倉(cāng)庫(kù)的別名> <遠(yuǎn)程倉(cāng)庫(kù)的URL地址>

# 修改遠(yuǎn)程倉(cāng)庫(kù)的別名
$ git remote rename <原遠(yuǎn)程倉(cāng)庫(kù)的別名> <新的別名>

# 刪除指定名稱(chēng)的遠(yuǎn)程倉(cāng)庫(kù)
$ git remote remove <遠(yuǎn)程倉(cāng)庫(kù)的別名>

# 修改遠(yuǎn)程倉(cāng)庫(kù)的 URL 地址
$ git remote set-url <遠(yuǎn)程倉(cāng)庫(kù)的別名> <新的遠(yuǎn)程倉(cāng)庫(kù)URL地址>

6. git branch

操作 Git 的分支命令。


# 列出本地的所有分支,當(dāng)前所在分支以 "*" 標(biāo)出
$ git branch

# 列出本地的所有分支并顯示最后一次提交,當(dāng)前所在分支以 "*" 標(biāo)出
$ git branch -v

# 創(chuàng)建新分支,新的分支基于上一次提交建立
$ git branch <分支名>

# 修改分支名稱(chēng)
# 如果不指定原分支名稱(chēng)則為當(dāng)前所在分支
$ git branch -m [<原分支名稱(chēng)>] <新的分支名稱(chēng)>
# 強(qiáng)制修改分支名稱(chēng)
$ git branch -M [<原分支名稱(chēng)>] <新的分支名稱(chēng)>

# 刪除指定的本地分支
$ git branch -d <分支名稱(chēng)>

# 強(qiáng)制刪除指定的本地分支
$ git branch -D <分支名稱(chēng)>

7. git checkout

檢出命令,用于創(chuàng)建、切換分支等。


# 切換到已存在的指定分支
$ git checkout <分支名稱(chēng)>

# 創(chuàng)建并切換到指定的分支,保留所有的提交記錄
# 等同于 "git branch" 和 "git checkout" 兩個(gè)命令合并
$ git checkout -b <分支名稱(chēng)>

# 創(chuàng)建并切換到指定的分支,刪除所有的提交記錄
$ git checkout --orphan <分支名稱(chēng)>

# 替換掉本地的改動(dòng),新增的文件和已經(jīng)添加到暫存區(qū)的內(nèi)容不受影響
$ git checkout <文件路徑>

8. git cherry-pick


# 把已經(jīng)提交的記錄合并到當(dāng)前分支
$ git cherry-pick <commit ID>

9. git add

把要提交的文件的信息添加到暫存區(qū)中。當(dāng)使用 git commit 時(shí),將依據(jù)暫存區(qū)中的內(nèi)容來(lái)進(jìn)行文件的提交。

# 把指定的文件添加到暫存區(qū)中
$ git add <文件路徑>

# 添加所有修改、已刪除的文件到暫存區(qū)中
$ git add -u [<文件路徑>]
$ git add --update [<文件路徑>]

# 添加所有修改、已刪除、新增的文件到暫存區(qū)中,省略 <文件路徑> 即為當(dāng)前目錄
$ git add -A [<文件路徑>]
$ git add --all [<文件路徑>]

# 查看所有修改、已刪除但沒(méi)有提交的文件,進(jìn)入一個(gè)子命令系統(tǒng)
$ git add -i [<文件路徑>]
$ git add --interactive [<文件路徑>]

10. git commit

# 把暫存區(qū)中的文件提交到本地倉(cāng)庫(kù),調(diào)用文本編輯器輸入該次提交的描述信息
$ git commit

# 把暫存區(qū)中的文件提交到本地倉(cāng)庫(kù)中并添加描述信息
$ git commit -m "<提交的描述信息>"

# 把所有修改、已刪除的文件提交到本地倉(cāng)庫(kù)中
# 不包括未被版本庫(kù)跟蹤的文件,等同于先調(diào)用了 "git add -u"
$ git commit -a -m "<提交的描述信息>"

# 修改上次提交的描述信息
$ git commit --amend

11. get fetch

從遠(yuǎn)程倉(cāng)庫(kù)獲取最新的版本到本地的 tmp 分支上。


# 將遠(yuǎn)程倉(cāng)庫(kù)所有分支的最新版本全部取回到本地
$ git fetch <遠(yuǎn)程倉(cāng)庫(kù)的別名>

# 將遠(yuǎn)程倉(cāng)庫(kù)指定分支的最新版本取回到本地
$ git fetch <遠(yuǎn)程主機(jī)名> <分支名>

12. get merge

合并分支。


# 把指定的分支合并到當(dāng)前所在的分支下
$ git merge <分支名稱(chēng)>

13. git diff

# 比較當(dāng)前文件和暫存區(qū)中文件的差異,顯示沒(méi)有暫存起來(lái)的更改
$ git diff

# 比較暫存區(qū)中的文件和上次提交時(shí)的差異
$ git diff --cached
$ git diff --staged

# 比較當(dāng)前文件和上次提交時(shí)的差異
$ git diff HEAD

# 查看從指定的版本之后改動(dòng)的內(nèi)容
$ git diff <commit ID>

# 比較兩個(gè)分支之間的差異
$ git diff <分支名稱(chēng)> <分支名稱(chēng)>

# 查看兩個(gè)分支分開(kāi)后各自的改動(dòng)內(nèi)容
$ git diff <分支名稱(chēng)>...<分支名稱(chēng)>

14. git pull

從遠(yuǎn)程倉(cāng)庫(kù)獲取最新版本并合并到本地。
首先會(huì)執(zhí)行 git fetch,然后執(zhí)行 git merge,把獲取的分支的 HEAD 合并到當(dāng)前分支

# 從遠(yuǎn)程倉(cāng)庫(kù)獲取最新版本。
$ git pull

15. git push

把本地倉(cāng)庫(kù)的提交推送到遠(yuǎn)程倉(cāng)庫(kù)。

# 把本地倉(cāng)庫(kù)的分支推送到遠(yuǎn)程倉(cāng)庫(kù)的指定分支
$ git push <遠(yuǎn)程倉(cāng)庫(kù)的別名> <本地分支名>:<遠(yuǎn)程分支名>

# 刪除指定的遠(yuǎn)程倉(cāng)庫(kù)的分支
$ git push <遠(yuǎn)程倉(cāng)庫(kù)的別名> :<遠(yuǎn)程分支名>
$ git push <遠(yuǎn)程倉(cāng)庫(kù)的別名> --delete <遠(yuǎn)程分支名>

16. get reset

還原提交記錄。


# 重置暫存區(qū),但文件不受影響
# 相當(dāng)于將用 "git add" 命令更新到暫存區(qū)的內(nèi)容撤出暫存區(qū),可以指定文件
# 沒(méi)有指定 commit ID 則默認(rèn)為當(dāng)前 HEAD
$ git reset [<文件路徑>]
$ git reset --mixed [<文件路徑>]

# 將 HEAD 的指向改變,撤銷(xiāo)到指定的提交記錄,文件未修改
$ git reset <commit ID>
$ git reset --mixed <commit ID>

# 將 HEAD 的指向改變,撤銷(xiāo)到指定的提交記錄,文件未修改
# 相當(dāng)于調(diào)用 "git reset --mixed" 命令后又做了一次 "git add"
$ git reset --soft <commit ID>

# 將 HEAD 的指向改變,撤銷(xiāo)到指定的提交記錄,文件也修改了
$ git reset --hard <commit ID>

17. git revert

生成一個(gè)新的提交來(lái)撤銷(xiāo)某次提交,此次提交之前的所有提交都會(huì)被保留。

# 生成一個(gè)新的提交來(lái)撤銷(xiāo)某次提交
$ git revert <commit ID>

18. git tag

操作標(biāo)簽的命令。


# 打印所有的標(biāo)簽
$ git tag

# 添加輕量標(biāo)簽,指向提交對(duì)象的引用,可以指定之前的提交記錄
$ git tag <標(biāo)簽名稱(chēng)> [<commit ID>]

# 添加帶有描述信息的附注標(biāo)簽,可以指定之前的提交記錄
$ git tag -a <標(biāo)簽名稱(chēng)> -m <標(biāo)簽描述信息> [<commit ID>]

# 切換到指定的標(biāo)簽
$ git checkout <標(biāo)簽名稱(chēng)>

# 查看標(biāo)簽的信息
$ git show <標(biāo)簽名稱(chēng)>

# 刪除指定的標(biāo)簽
$ git tag -d <標(biāo)簽名稱(chēng)>

# 將指定的標(biāo)簽提交到遠(yuǎn)程倉(cāng)庫(kù)
$ git push <遠(yuǎn)程倉(cāng)庫(kù)的別名> <標(biāo)簽名稱(chēng)>

# 將本地所有的標(biāo)簽全部提交到遠(yuǎn)程倉(cāng)庫(kù)
$ git push <遠(yuǎn)程倉(cāng)庫(kù)的別名> –tags

19. git mv

重命名文件或者文件夾。


# 重命名指定的文件或者文件夾
$ git mv <源文件/文件夾> <目標(biāo)文件/文件夾>

20 git rm

刪除文件或者文件夾。


# 移除跟蹤指定的文件,并從本地倉(cāng)庫(kù)的文件夾中刪除
$ git rm <文件路徑>

# 移除跟蹤指定的文件夾,并從本地倉(cāng)庫(kù)的文件夾中刪除
$ git rm -r <文件夾路徑>

# 移除跟蹤指定的文件,在本地倉(cāng)庫(kù)的文件夾中保留該文件
$ git rm --cached

Git操作場(chǎng)景示例

  1. 刪除掉本地不存在的遠(yuǎn)程分支
    多人合作開(kāi)發(fā)時(shí),如果遠(yuǎn)程的分支被其他開(kāi)發(fā)刪除掉,在本地執(zhí)行 git branch --all 依然會(huì)顯示該遠(yuǎn)程分支,可使用下列的命令進(jìn)行刪除:
# 使用 pull 命令,添加 -p 參數(shù)
$ git pull -p

# 等同于下面的命令
$ git fetch -p
$ git fetch --prune origin
  1. 推送本地倉(cāng)庫(kù)到遠(yuǎn)程倉(cāng)庫(kù)
git init
git add README.md
git commit -m "first commit"
git branch -M master
# 如果本地倉(cāng)庫(kù)已存在,只需執(zhí)行下面的代碼即可
git remote add origin git@xxxx.git
git push -u origin master
  1. 當(dāng)你在需要切換分支又不想提交當(dāng)前分支代碼

在開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)出現(xiàn)這樣的情況, 在 A 分支上修改代碼,代碼還沒(méi)有修改完成,不想提交,但是有個(gè)緊急的任務(wù)需要在 B 分支上修改,那么你就需要切換到 B 分支上,但是切換分支時(shí)必須保證當(dāng)前分支是干凈的分支(沒(méi)有在暫存區(qū)的文件),此時(shí)就需要使用 git stash 命令把修改的文件暫時(shí)保存起來(lái),然后 git checkout B,等 B 分支上修改完成后,再切換為 A 分支,使用命令 git stash pop 把剛才暫時(shí)保存的文件進(jìn)行恢復(fù)。

git stash save "save message"  
# 執(zhí)行存儲(chǔ)時(shí),添加備注,方便查找,只有g(shù)it stash 也要可以的,但查找時(shí)不方便識(shí)別。

# 查看stash了哪些存儲(chǔ)
git stash list 

# 顯示做了哪些改動(dòng),默認(rèn)show第一個(gè)存儲(chǔ),如果要顯示其他存貯,后面加
git stash showstash@{$num}
git stash show stash@{1}

#顯示第一個(gè)存儲(chǔ)的改動(dòng),如果想顯示其他存存儲(chǔ),命令
git stash show -p : :git stash show  stash@{$num}  -p ,

# 比如第二個(gè)
git stash show  stash@{1}  -p

# 應(yīng)用某個(gè)存儲(chǔ),但不會(huì)把存儲(chǔ)從存儲(chǔ)列表中刪除,默認(rèn)使用第一個(gè)存儲(chǔ),即
git stash apply stash@{0},

# 如果要使用其他個(gè)
git stash apply stash@{$num} ,

# 比如第二個(gè)
git stash apply stash@{1} 

# 命令恢復(fù)之前緩存的工作目錄,將緩存堆棧中的對(duì)應(yīng)stash刪除,并將對(duì)應(yīng)修改應(yīng)用到當(dāng)前的工作目錄下,默認(rèn)為第一個(gè)stash,即stash@{0}
git stash pop

# 如果要應(yīng)用并刪除其他stash
git stash pop stash@{1}

# 丟棄stash@{$num}存儲(chǔ),從列表中刪除這個(gè)存儲(chǔ)
git stash drop stash@{$num} 

# 刪除所有緩存的stash
git stash clear :

git 文件的三種狀態(tài)

https://yq.aliyun.com/articles/707703

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

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