Git命令詳解

添加操做

git add .                              //所有提交到暫存區

提交操做

git commit -m <description>           //提交到本地庫(必須先add)
git commit -am                        //可提交未add文件,可是不包括未建立文件
git commit --amend                    //這個命令會將暫存區中的文件提交。 若是自上次提交以來你還未作任何修改(例如,在上次提交後立刻執行了此命令),那麼快照會保持不變,而你所修改的只是提交信息。

刪除操做

git rm <file>             //從暫存區刪除(stage)  

git rm -f <file>          //刪除以前修改過而且已經放到暫存區域
git rm --cached <file>    //若是把文件從暫存區域移除,但仍然但願保留在當前工做目錄中,換句話說,僅是從跟蹤清單中刪除

撤銷操做

在Git中,用HEAD表示當前版本。git

git HEAD
git HEAD~        //上一個版本
git HEAD~100     //往上100個版本

撤銷add

git checkout <file>          //恢復未提交的更改
git reset HEAD <file>        //取消以前 git add 添加

撤銷commit

圖片描述

git reset

git reset --hard HEAD~              //回退到上一個版本
git reset --hard <commit ID>        //回退到指定版本

版本直接回退,簡單粗暴。
若是遠程分支也想要回退,git push -f (known changes)。shell

git revert

git revert HEAD                  //撤銷前一次commit

不能隨便刪除已經發布的提交,這時須要經過revert建立要否認的提交。
圖片描述緩存

若是不當心提交了不想要的代碼,而小夥伴在你發現時,已經提交了,這時候就不能簡單的回退版本。工具

git revert <commit ID>      //須要撤銷的提交ID

這時候會有衝突,解決衝突以後,再從新提交,那麼就會產生一條新的提交紀錄。
提交到遠程分支,git push。this

git revert 和 git reset的區別
  1. git revert是用一次新的commit來回滾以前的commit,git reset是直接刪除指定的commit。
  2. 在回滾這一操做上看,效果差很少。可是在往後繼續merge之前的老版本時有區別。由於git revert是用一次逆向的commit「中和」以前的提交,所以往後合併老的branch時,致使這部分改變不會再次出現,可是git reset是之間把某些commit在某個branch上刪除,於是和老的branch再次merge時,這些被回滾的commit應該還會被引入。
  3. git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,可以抵消要被revert的內容。

移動或重命名操做

git mv 命令用於移動或重命名一個文件、目錄。spa

git mv <file> 
git mv <old name>  <new name>

其實,運行 git mv 就至關於運行了下面三條命令:code

mv README.md README
git rm README.md
git add README

git rebase

git rebase和git merge區別
圖片描述
圖片描述
在rebase的過程當中,也許會出現衝突(conflict)。 在這種狀況,Git會中止rebase並會讓你去解決衝突;在解決完衝突後,用"git-add"命令去更新這些內容的索引(index), 而後,你無需執行 git-commit,只要執行:索引

git rebase --continue      //繼續
git rebase --abort         //取消

git rebase -i

在rebase指定i選項,您能夠改寫、替換、刪除或合併提交。圖片

git rebase -i  [startpoint]  [endpoint]

其中-i的意思是--interactive,即彈出交互式的界面讓用戶編輯完成合並操做,[startpoint] [endpoint]則指定了一個編輯區間,若是不指定[endpoint],則該區間的終點默認是當前分支HEAD所指向的commit(注:該區間指定的是一個前開後閉的區間)。ip

  • pick:保留該commit(縮寫:p)
  • reword:保留該commit,但我須要修改該commit的註釋(縮寫:r)
  • edit:保留該commit, 但我要停下來修改該提交(不只僅修改註釋)(縮寫:e)
  • squash:將該commit和前一個commit合併(縮寫:s)
  • fixup:將該commit和前一個commit合併,但我不要保留該提交的註釋信息(縮寫:f)
  • exec:執行shell命令(縮寫:x)
  • drop:我要丟棄該commit(縮寫:d)

合併歷史紀錄

git rebase -i HEAD~2

//咱們會進入vit模式,將pick改爲squash,而後按esc : wq(保存並退出)。

git push -f

圖片描述
圖片描述

git status

要查看哪些文件處於什麼狀態。

git status -s | git status --short          //獲得一種更爲緊湊的格式輸出

git diff

git diff 命令顯示add與commit的改動區別。

git diff  <file>            //還沒有緩存的改動
git diff --cached           //查看已緩存的改動
git diff HEAD               //查看已緩存的與未緩存的全部改動
git diff --stat             //顯示摘要而非整個 diff

查看提交歷史

git log

在提交了若干更新,又或者克隆了某個項目以後,你也許想回顧下提交歷史。 完成這個任務最簡單而又有效的工具是 git log 命令。

git log -p          //用來顯示每次提交的內容差別
git log -2          //僅顯示最近兩次提交
git log --stat      //每次提交的簡略的統計信息
git log --pretty    //指定使用不一樣於默認格式的方式展現提交歷史,git log --pretty=oneline
使用git show命令查看某一次提交詳細信息。

git reflog

若是在回退之後又想再次回到以前的版本,git reflog 能夠查看全部分支的全部操做記錄(包括commit和reset的操做),包括已經被刪除的commit記錄,git log則不能察看已經刪除了的commit記錄。
git reflog

git stash

在Git中,隱藏操做將使您可以修改跟蹤文件,階段更改,並將其保存在一系列未完成的更改中,並能夠隨時從新應用。

git stash          //把當前工做的改變隱藏起來
git stash list     //查看已存在更改的列表
git stash pop      //可從堆棧中刪除更改並將其放置在當前工做目錄中

分支操做

建立分支

git branch <branch name>               //建立分支
git checkout <branch name>             //切換到分支

git checkout -b <branch name>          //建立並切換到分支

刪除分支

git branch -d <branch name>
git branch -D <branch name>       //強制刪除分支

查看分支

git branch <name>
git branch -a      //查看全部分支
git branch -r      //查看遠程分支

重命名分支

git branch -m <old name> <new name>

合併分支

git checkout master                    //切換到master
git merge <branch name>                //合併分支

若是分支未pull最新代碼,那麼提交的時候,歷史紀錄就不清晰;匯合分支上的提交,而後一同合併到分支
圖片描述

git merge –squash <branch name>
git commit -am
git push

提取其餘分支提交

在cherry-pick,您能夠從其餘分支複製指定的提交,而後導入到如今的分支。

git cherry-pick <commit id>

標籤操做

若是你達到一個重要的階段,並但願永遠記住那個特別的提交快照,你可使用 git tag 給它打上標籤。

建立標籤

git tag <name>
git tag -a <name>              //建立一個帶註解的標籤

查看標籤

git tag
git show <tag name>
git push origin <tag name>

刪除標籤

git tag -d <name>

提交空文件夾

  • 在空文件夾內新建.gitignore文件,並寫上以下:
#Ignore everything in this directory
*
#Except this file
!.gitignore
  • 咱們也能夠建立個對項目無影響的文件,如 .gitkeep 名字你們隨意便可
相關文章
相關標籤/搜索