目錄
一、洞悉[1]
本地分支與遠程倉庫聯(lián)系關系總結:
查看默認追蹤:
git config --list拉到底下會看到所有遠程倉庫及所有默認追蹤【有則顯示】git status工作區(qū)干凈情況下,底下可以看到當前分支的默認追蹤【有則顯示】git branch -vv所有本地分支及所有默認追蹤【有則顯示】及所有分支提交的信息
綁定及修改默認追蹤(特別是對于多個遠程倉庫)
- 綁定: push時,綁定:
git push -u 主機名 本地分支:遠程分支
【優(yōu)點】遠程倉庫可以不存在時也可以操作
【缺點】會附帶push
【總結】綁定- 修改:
git branch --set-upstream-to=主機名/遠程分支 本地分支
【優(yōu)點】沒有副作用
【缺點】必須要有該遠程分支(因為只有push能修改遠程分支)
【總結】修改(特別適合多倉庫時,切換追蹤查看情況)
--set-upstream-to在pull時,如果沒有默認追蹤,則會提示這個命令
查看所有分支:及同步遠程分支
git branch -vv所有本地分支及所有默認追蹤【有則顯示】git branch -a所有本地分支及所有遠程倉庫及分支
同步遠程分支---說明
- git branch只能知道遠程最后一次更新下來后的遠程分支(pull/fetch或clone)及自己后續(xù)對遠程分支的操作。但其它同事的遠程分支操作并沒有更新到下來
- 可能同事A刪除了遠程某個分支,則會和自己本地顯示的遠程分支不同步
解決方法
git pull/fetch
【優(yōu)點】拉取的時候會自動更新該遠程倉庫的分支
【缺點】不及時,且拉取的只是該遠程倉庫的的分支
【總結】自動同步git remote update
【優(yōu)點】會更新所有遠程倉庫的分支
【缺點】和原來本地保留的遠程分支或操作。即:只會添加,不會去掉遠程不存在的遠程分支。查看文章
【總結】手動同步,且要保留之前的遠程分支git remote update -p|--prune 主機名
【優(yōu)點】 和原來本地保留的遠程分支并操作。即和遠程完全一樣,會剔除掉不存在的遠程分支。
【缺點】只會更新該遠程倉庫的分支
【相同命令】git remote prune 主機名查看文章
【總結】手動同步,且要和遠程倉庫保持一致
查看所有遠程倉庫:
git remote -vv所有遠程倉庫git remote show 主機名一個個主機查看,可以查看遠程倉庫及分支,及該倉庫對應本地的所有默認追蹤【有則顯示】
二、工作順序[2]
【正確的工作順序】
【總結】工作前,git pull及push前,git pull
【總結】多用git status
【總結】多用git diff
- 工作前
git pull。同事A,先git pull 主機名 遠程分支:本地分支或簡寫- 再
git status。因為:
- 如果工作區(qū)干凈,git pull則會直接更新到工作區(qū)
- 如果工作區(qū)進行了操作,則會更新到暫存區(qū),此時git status會發(fā)現(xiàn)和暫存區(qū)不一樣。并且會提示你是丟棄工作區(qū)還是保留。
若保留:直到你git commit ,后會自動進入merge解決沖突操作。最后push即可
- 開始工作
push前,再git pull,若有沖突,解決沖突,再push- 同事B工作前,也是以上步驟
說明
pull可能會有沖突:若工作區(qū)不干凈,git commit后自動進入push可能會有沖突:若有沖突,自動進入
三、常用命令總結[3]
- 初始化倉庫:
git init
- 增刪改查配置:
git config基本格式:
git config [--local|--global|--system]
- 增:
--add section.key value- 刪:
--unset {key}、--unset {key} value、--unset-all {key}- 改:
section.key value- 查:
{key}、--get-all {key}、--list- 編輯:
--edit
- 提交到暫存區(qū):
git add [<file>|<path>]可以簡寫git add .說明:.表示根目錄(以下path都可以.)后悔藥:
git rm --cached [<file>]撤銷追蹤git checkout -- [<file>|<path>]從暫存區(qū)重置到工作區(qū)(工作區(qū)撤銷修改)git reset HEAD [<file>|<path>]從版本庫重置到暫存區(qū)(暫存區(qū)撤銷修改)補充:
- 好習慣:add前,查看工作區(qū)和暫存區(qū)的區(qū)別:
git diff- 好習慣:每次操作后,
git status查看git狀態(tài)
- 提交到版本庫:
git commit -m '這次提交的說明'后悔藥:
git reset --hard HEAD^版本回退
對比暫存區(qū)及工作區(qū)的重置:因為版本庫有多個版本,所以可以選擇重置到哪個版本
說明:
提交到遠程倉庫前,都有后悔藥(遠程倉庫版本個人沒權限修改)補充:
- 好習慣:commit前,查看暫存區(qū)和版本庫的區(qū)別:
git diff --cached
- 查看提交歷史:
$ git log(版本庫中往前查:已刪除的或往后的查不到)相關操作:
$ git reflog查看提交日志(本地提交記錄查:這臺電腦所有的提交)
- 增刪改查本地分支:
git branch
- 增:
$ git branch <BranchName>- 刪:
$ git branch -d <BranchName>說明:-d即delete刪除- 改:
$ git branch -m <old_branchName> <new_branchName>說明:-m即modify修改- 查:
git branch、git branch -a、git branch -vv
- git diff 比較差異:
- 工作區(qū)和暫存區(qū)比較:
git diff- 暫存區(qū)和版本庫比較:
git diff --cached- 版本庫和遠程倉庫比較:
git diff 本地分支 <remote>/遠程分支- 分支比較:
git diff 分支1 分支2
把結果輸出到指定文件:后面加
>>文件名.diff
- 提交到遠程倉庫:
git push
- 完整命令:
git push 主機名 本地分支:遠程分支- 簡化:
git push需要設置默認的主機(遠程分支默認和本地分支同名)
$ git push --set-upstream|-u <remote> 本地分支:遠程分支- 若不同名,要設置:
git config --global push.default upstream通過以上命令可以發(fā)現(xiàn):
git push也可以修改遠程分支
- 增:
git push 主機名 本地分支:遠程分支- 刪:
git push 主機名 :遠程分支- 改:先刪,在增
- 查:同branch命令:
git branch -a、git branch -vv
- 拉取更新
git pull和git fetch完整命令:
$ git pull 主機名 <遠程分支名>:<本地分支名>
$ git fetch 主機名 <遠程分支名>:<本地分支名>
區(qū)別:
git pull和git fetch的區(qū)別
查看文章
- 克隆項目
git clone <remote_url>
- 倉庫命令
$ git remote
- 增:
git remote add [shortname] [url]- 刪:
git remote remove <name>- 改名字:
git remote rename <old> <new>
改網(wǎng)址:git remote set-url <name> <newurl>]
改網(wǎng)址(增):git remote set-url --add <name> <newurl>]可以push多個倉庫- 查:
git remote、git remote -v、git remote show 主機名- 更新遠程分支:
git remote update、git remote update -p|--prune <remote>、git prune <remote>
- 合并分支
- Fast-forward(ff)模式:
git merge -ff other_branch
簡寫git merge other_branch- --no-ff模式:
git merge --no-ff -m '提交信息' other_branch
- 本地緩存:將工作區(qū)和暫存區(qū)緩存起來。并使其重置為上次提交后的狀態(tài)
- 增:
git stash push -m '這次緩存的信息'- 刪:
c drop <stash_index>或git stash drop刪除棧頂
全刪:git stash clear- 應用:
git stash [apply|pop] <stash_name>或git stash [apply|pop]應用棧頂那個- 查:
$ git stash list