Git常用命令
Git操作
- git diff vs git log
- git pull vs git fetch
- git rebase
- git revert
- git reset vs git checkout vs git revert
- ^ 和 ~
- alias
1 git diff vs git log
-
git diff master..test
比較master與test差異 -
git log master..test
查看test中尚未并入master的提交 -
git diff master…test
比較master與test共有分支與test分支的差異 -
git log master…test
查看只被master或test中某一個(gè)包含的差異性提交净赴,加上--left-right可顯示包含方 -
git diff支持目錄提交差異洒忧,git log支持文件提交差異
git diff HEAD -- ./dir 比較dir目錄與HEAD提交的差異
git log file 查看file提交歷史 -
git diff --stat
統(tǒng)計(jì)所有改動(dòng) -
git log --stat
統(tǒng)計(jì)提交改動(dòng)
2 git pull vs git fetch
-
git fetch
下載遠(yuǎn)程分支犹撒,然后更新本地FETCH_HEAD文件
git fetch : git fetch origin -
git pull
下載遠(yuǎn)程分支次员,然后合并至當(dāng)前HEAD
git pull = git fetch + git merge FETCH_HEAD
多用git fetch嘀趟,少用git pull
3 git rebase
- 線性提交 與git merge功能類似
git merge
:新的提交將分支的提交歷史連在一起诫尽,生成merge提交
git rebase
:重寫提交歷史晴玖,把整個(gè)分支移動(dòng)到待合并分支后 - 壓縮提交
刪除不必要的提交
線性提交
-
merget提交
-
rebase提交
- 一個(gè)實(shí)例
-
merge
merge -
rebase
rebase
壓縮提交
git rebase 使用
使用git rebase:一個(gè)干凈的职抡、線性的提交歷史
-
git rebase <branch>
以<branch>為基,重寫當(dāng)前提交歷史 [可以加上 -i] -
git merge-base <branch1> <branch2>
返回基提交ID -
git rebase –i HEAD~3
重寫當(dāng)前HEAD最新3次提交歷史 -
git pull –rebase
通過變基來整合遠(yuǎn)程分支
注意:
rebase會(huì)重寫提交歷史眯分,不要在公共的分支上使用
4 git revert
-
git revert
生成一個(gè)新的提交拌汇,撤銷一個(gè)已經(jīng)存在提交的所有修改
對于merge commit的提交:git revert –m 1[2] <commit>
-m i :需要保留的父節(jié)點(diǎn)是第i父提交
git revert
-
git revert需要注意的問題
合并曾經(jīng)被revert的提交,會(huì)保留revert的信息弊决,從而導(dǎo)致部分提交無法應(yīng)用到新的分支噪舀,解決這個(gè)最好的方式是撤消還原原始的合并
撤銷還原
5 git reset vs git checkout vs git revert
提交層面
-
git reset
reset將分支的末端指向另一個(gè)提交,移除當(dāng)前提交 -
git checkout
checkout移動(dòng)HEAD指向某個(gè)引用 -
git revert
重新生成一個(gè)提交增加到當(dāng)前的commit
git reset --soft –mixed --hard
git reset作用域
文件層面
-
git reset
將緩存區(qū)同步至指定的提交飘诗,不影響工作目錄 -
git checkout
將工作目錄同步至指定的提交与倡,不影響提交 -
git revert
無文件層面操作
總結(jié)
命令 | 作用域 | 常用情景 |
---|---|---|
git reset | 提交層面 | 在私有分支上舍棄一些沒有提交的更改 |
git reset | 文件層面 | 將文件從緩存區(qū)中移除 |
git checkout | 提交層面 | 切換分支或查看舊版本 |
git checkout | 文件層面 | 舍棄工作目錄中的更改 |
git revert | 提交層面 | 在公共分支上回滾更改 |
git revert | 文件層面 | (然而并沒有) |
6 ^ 和 ~
- 相當(dāng)于父提交,有多個(gè)父提交時(shí)昆稿,加上數(shù)字表示第幾個(gè)父提交纺座,相當(dāng)于^1
- ~n相當(dāng)于連續(xù)的n個(gè)^
一個(gè)例子
HEAD^
:4927HEAD^2
:063fHEAD^3
:4f9c
HEAD~
:4927HEAD~2
:1c73
7 alias
- st=
status
co=checkout
br=branch
ci=commit
- mg=
merge
md=commit --amend
dt=difftool
mt=mergetool
- last=
log -1 HEAD
cf=config
line=log --oneline
visual=!gitk
- ls=
log --pretty=format:\"%C(yellow)%h %C(blue)%ad %C(red)%d %C(reset)%s %C(green)[%cn]\" --decorate --date=short
- hist =
log --pretty=format:\"%C(yellow)%h %C(red)%d %C(reset)%s %C(green)[%an] %C(blue)%ad\" --topo-order --graph --date=short
- lg=
log --color --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit
- ld =
log --pretty=format:"%C(yellow)%h\\ C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short --graph