Git命令詳解
添加操作
git add . //全部提交到暫存區(qū)
提交操作
git commit -m <description> //提交到本地庫(kù)(必須先add)
git commit -am //可提交未add文件,但是不包括未創(chuàng)建文件
git commit --amend //這個(gè)命令會(huì)將暫存區(qū)中的文件提交。 如果自上次提交以來(lái)你還未做任何修改(例如,在上次提交后馬上執(zhí)行了此命令),那么快照會(huì)保持不變,而你所修改的只是提交信息。
刪除操作
git rm <file> //從暫存區(qū)刪除(stage)
git rm -f <file> //刪除之前修改過并且已經(jīng)放到暫存區(qū)域
git rm --cached <file> //如果把文件從暫存區(qū)域移除,但仍然希望保留在當(dāng)前工作目錄中,換句話說,僅是從跟蹤清單中刪除
撤銷操作
在Git中,用HEAD表示當(dāng)前版本。
git HEAD
git HEAD~ //上一個(gè)版本
git HEAD~100 //往上100個(gè)版本
撤銷add
git checkout <file> //恢復(fù)未提交的更改
git reset HEAD <file> //取消之前 git add 添加
撤銷commit

- git reset
git reset --hard HEAD~ //回退到上一個(gè)版本
git reset --hard <commit ID> //回退到指定版本
版本直接回退,簡(jiǎn)單粗暴。
如果遠(yuǎn)程分支也想要回退,git push -f (known changes)。
- git revert
git revert HEAD //撤銷前一次commit
不能隨便刪除已經(jīng)發(fā)布的提交,這時(shí)需要通過revert創(chuàng)建要否定的提交。

如果不小心提交了不想要的代碼,而小伙伴在你發(fā)現(xiàn)時(shí),已經(jīng)提交了,這時(shí)候就不能簡(jiǎn)單的回退版本。
git revert <commit ID> //需要撤銷的提交ID
這時(shí)候會(huì)有沖突,解決沖突之后,再重新提交,那么就會(huì)產(chǎn)生一條新的提交紀(jì)錄。
提交到遠(yuǎn)程分支,git push。
git revert 和 git reset的區(qū)別
- git revert是用一次新的commit來(lái)回滾之前的commit,git reset是直接刪除指定的commit。
- 在回滾這一操作上看,效果差不多。但是在日后繼續(xù)merge以前的老版本時(shí)有區(qū)別。因?yàn)間it revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch時(shí),導(dǎo)致這部分改變不會(huì)再次出現(xiàn),但是git reset是之間把某些commit在某個(gè)branch上刪除,因而和老的branch再次merge時(shí),這些被回滾的commit應(yīng)該還會(huì)被引入。
- git reset 是把HEAD向后移動(dòng)了一下,而git revert是HEAD繼續(xù)前進(jìn),只是新的commit的內(nèi)容和要revert的內(nèi)容正好相反,能夠抵消要被revert的內(nèi)容。
移動(dòng)或重命名操作
git mv 命令用于移動(dòng)或重命名一個(gè)文件、目錄。
git mv <file>
git mv <old name> <new name>
其實(shí),運(yùn)行 git mv 就相當(dāng)于運(yùn)行了下面三條命令:
mv README.md README
git rm README.md
git add README
git rebase
git rebase和git merge區(qū)別


在rebase的過程中,也許會(huì)出現(xiàn)沖突(conflict)。 在這種情況,Git會(huì)停止rebase并會(huì)讓你去解決沖突;在解決完沖突后,用"git-add"命令去更新這些內(nèi)容的索引(index), 然后,你無(wú)需執(zhí)行 git-commit,只要執(zhí)行:
git rebase --continue //繼續(xù)
git rebase --abort //取消
git rebase -i
在rebase指定i選項(xiàng),您可以改寫、替換、刪除或合并提交。
git rebase -i [startpoint] [endpoint]
其中-i的意思是--interactive,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint] [endpoint]則指定了一個(gè)編輯區(qū)間,如果不指定[endpoint],則該區(qū)間的終點(diǎn)默認(rèn)是當(dāng)前分支HEAD所指向的commit(注:該區(qū)間指定的是一個(gè)前開后閉的區(qū)間)。
- pick:保留該commit(縮寫:p)
- reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
- edit:保留該commit, 但我要停下來(lái)修改該提交(不僅僅修改注釋)(縮寫:e)
- squash:將該commit和前一個(gè)commit合并(縮寫:s)
- fixup:將該commit和前一個(gè)commit合并,但我不要保留該提交的注釋信息(縮寫:f)
- exec:執(zhí)行shell命令(縮寫:x)
- drop:我要丟棄該commit(縮寫:d)
合并歷史紀(jì)錄
git rebase -i HEAD~2
//我們會(huì)進(jìn)入vit模式,將pick改成squash,然后按esc : wq(保存并退出)。
git push -f


git status
要查看哪些文件處于什么狀態(tài)。
git status -s | git status --short //得到一種更為緊湊的格式輸出
git diff
git diff 命令顯示add與commit的改動(dòng)區(qū)別。
git diff <file> //尚未緩存的改動(dòng)
git diff --cached //查看已緩存的改動(dòng)
git diff HEAD //查看已緩存的與未緩存的所有改動(dòng)
git diff --stat //顯示摘要而非整個(gè) diff
查看提交歷史
git log
在提交了若干更新,又或者克隆了某個(gè)項(xiàng)目之后,你也許想回顧下提交歷史。 完成這個(gè)任務(wù)最簡(jiǎn)單而又有效的工具是 git log 命令。
git log -p //用來(lái)顯示每次提交的內(nèi)容差異
git log -2 //僅顯示最近兩次提交
git log --stat //每次提交的簡(jiǎn)略的統(tǒng)計(jì)信息
git log --pretty //指定使用不同于默認(rèn)格式的方式展示提交歷史,git log --pretty=oneline
使用git show命令查看某一次提交詳細(xì)信息。
git reflog
如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作記錄(包括commit和reset的操作),包括已經(jīng)被刪除的commit記錄,git log則不能察看已經(jīng)刪除了的commit記錄。
git reflog
git stash
在Git中,隱藏操作將使您能夠修改跟蹤文件,階段更改,并將其保存在一系列未完成的更改中,并可以隨時(shí)重新應(yīng)用。
git stash //把當(dāng)前工作的改變隱藏起來(lái)
git stash list //查看已存在更改的列表
git stash pop //可從堆棧中刪除更改并將其放置在當(dāng)前工作目錄中
分支操作
創(chuàng)建分支
git branch <branch name> //創(chuàng)建分支
git checkout <branch name> //切換到分支
git checkout -b <branch name> //創(chuàng)建并切換到分支
刪除分支
git branch -d <branch name>
git branch -D <branch name> //強(qiáng)制刪除分支
查看分支
git branch <name>
git branch -a //查看所有分支
git branch -r //查看遠(yuǎn)程分支
重命名分支
git branch -m <old name> <new name>
合并分支
git checkout master //切換到master
git merge <branch name> //合并分支
如果分支未pull最新代碼,那么提交的時(shí)候,歷史紀(jì)錄就不清晰;匯合分支上的提交,然后一同合并到分支

git merge –squash <branch name>
git commit -am
git push
提取其他分支提交
在cherry-pick,您可以從其他分支復(fù)制指定的提交,然后導(dǎo)入到現(xiàn)在的分支。
git cherry-pick <commit id>
標(biāo)簽操作
如果你達(dá)到一個(gè)重要的階段,并希望永遠(yuǎn)記住那個(gè)特別的提交快照,你可以使用 git tag 給它打上標(biāo)簽。
創(chuàng)建標(biāo)簽
git tag <name>
git tag -a <name> //創(chuàng)建一個(gè)帶注解的標(biāo)簽
查看標(biāo)簽
git taggit show <tag name>
git push origin <tag name>
刪除標(biāo)簽
git tag -d <name>