1. 程式人生 > 實用技巧 >Git命令詳解2

Git命令詳解2

新增操作

git add <filename>                     //新增到暫存區(stage)
git add .                              //全部提交到暫存區

提交操作

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

刪除操作

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

git rm -f <file>          //刪除之前修改過並且已經放到暫存區域
git rm --cached <file>    //如果把檔案從暫存區域移除,但仍然希望保留在當前工作目錄中,換句話說,僅是從跟蹤清單中刪除

撤銷操作

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

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)。

git revert
git revertHEAD//撤銷前一次commit

不能隨便刪除已經發布的提交,這時需要通過revert建立要否定的提交。

如果不小心提交了不想要的程式碼,而小夥伴在你發現時,已經提交了,這時候就不能簡單的回退版本。

git revert <commitID>//需要撤銷的提交ID

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

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 命令用於移動或重新命名一個檔案、目錄。

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

其實,執行 git mv 就相當於運行了下面三條命令:

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選項,您可以改寫、替換、刪除或合併提交。

gitrebase-i[startpoint][endpoint]

其中-i的意思是--interactive,即彈出互動式的介面讓使用者編輯完成合並操作,[startpoint] [endpoint]則指定了一個編輯區間,如果不指定[endpoint],則該區間的終點預設是當前分支HEAD所指向的commit(注:該區間指定的是一個前開後閉的區間)。

  • 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

要檢視哪些檔案處於什麼狀態。

gitstatus-s | gitstatus--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記錄。
gitreflog

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 bash命令下輸入

git branch | grep '分支名' //匹配分支名,可用正則
git branch | grep '分支名' | cut-c 2- | xargs git branch -D
反選:git branch | grep '分支名' -D

檢視分支

git branch <name>
git branch -a      //檢視所有分支
git branch -r      //檢視遠端分支

重新命名分支

git branch -m<oldname><newname>

合併分支

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

如果分支未pull最新程式碼,那麼提交的時候,歷史紀錄就不清晰;匯合分支上的提交,然後一同合併到分支

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

提取其他分支提交

在cherry-pick,您可以從其他分支複製指定的提交,然後匯入到現在的分支。

gitcherry-pick <commit id>

標籤操作

如果你達到一個重要的階段,並希望永遠記住那個特別的提交快照,你可以使用 git tag 給它打上標籤。

建立標籤

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

檢視標籤

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

刪除標籤

gittag -d <name>

提交空資料夾

  • 在空資料夾內新建.gitignore檔案,並寫上如下:
#Ignore everything in this directory
*
#Except this file
!.gitignore
  • 我們也可以建立個對專案無影響的檔案,如 .gitkeep 名字大家隨意即可