1. git config
配置 Git 的相關(guān)參數(shù)。
Git 一共有3個(gè)配置文件:
- 倉(cāng)庫(kù)級(jí)的配置文件:在倉(cāng)庫(kù)的 .git/.gitconfig,該配置文件只對(duì)所在的倉(cāng)庫(kù)有效。
- 全局配置文件:Mac 系統(tǒng)在 ~/.gitconfig,Windows 系統(tǒng)在 C:\Users<用戶(hù)名>.gitconfig。
- 系統(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)景示例
- 刪除掉本地不存在的遠(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
- 推送本地倉(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
- 當(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)