天天看點

git常用指令總結

1. git的常用操作

1. 檔案基本操作 描述
git help <command> 顯示command的help
git show ($id) 顯示某次送出的内容
git ls-files 檢視版本控制區的所有檔案
git status 檢視檔案狀态
git add <file> 将工作檔案修改送出到本地暫存區
git add . 将所有修改過的工作檔案送出暫存區
git rm <file> 從版本庫中删除檔案
git rm --cached 從版本庫中删除檔案,但工作區不删除檔案
git reset 從暫存區恢複到工作檔案
git reset -- .
git reset --hard 恢複最近一次送出過的狀态,即放棄上次送出後的所有本次修改
git commit -m "xxx" 将暫存區所有檔案送出到版本控制區
git commit -am "xxx" 等同于 git add && git commit -m "xxx"
git commit --amend 修改最後一次送出記錄
git checkout -- 抛棄工作區修改
git checkout .
git revert <$id> 恢複某次送出的狀态,恢複動作本身也建立次送出對象
git revert HEAD 恢複最後一次送出的狀态
2. 檢視檔案diff 詳情見下圖
3. 檢視送出記錄
git log 檢視送出記錄
git log <file> 檢視該檔案每次送出記錄
git log -p <file> 檢視每次詳細修改内容的diff
git log --stat 檢視送出統計資訊
git reflog 檢視所有送出版本記錄
4. 分支操作
git branch -r 檢視遠端分支
git branch <new_branch> 建立新的分支
git branch -v 檢視各個分支最後送出資訊
git branch --merged 檢視已經被合并到目前分支的分支
git branch --no-merged 檢視尚未被合并到目前分支的分支
git checkout <branch> 切換到某個分支
git checkout -b <new_branch> 建立新的分支,并且切換過去
git checkout -b <new_branch> <branch> 基于branch建立新的new_branch
git checkout $id 把某次曆史送出記錄checkout出來,但無分支資訊,切換到其他分支會自動删除
git checkout $id -b <new_branch> 把某次曆史送出記錄checkout出來,建立成一個分支
git branch -d <branch> 删除某個分支,若該分支未merge,則不成功
git branch -D <branch> 強制删除某個分支
5. 分支合并和rebase
git merge <branch> 将branch分支合并到目前分支
git merge origin/master --no-ff 不要Fast-Foward合并,這樣可以生成merge送出
6. Git遠端分支管理
git pull 抓取遠端倉庫所有分支更新并合并到本地
git pull --no-ff 抓取遠端倉庫所有分支更新并合并到本地,不要快進合并
git fetch origin 抓取遠端倉庫更新
git merge origin/master 将遠端主分支合并到本地目前分支
git checkout --track origin/branch 跟蹤某個遠端分支建立相應的本地分支

git checkout -b <local_branch>

origin/<remote_branch>

基于遠端分支建立本地分支,功能同上
git push push所有分支
git push origin master 将本地主分支推到遠端主分支
git push -u origin master 将本地主分支推到遠端(如無遠端主分支則建立,用于初始化遠端倉庫)
git push origin <local_branch> 建立遠端分支, origin是遠端倉庫名
**git push origin <local_branch>:<remote_branch> ** 建立遠端分支
git push origin :<remote_branch> 先删除本地分支(git br -d <branch>),然後再push删除遠端分支
7. Git遠端倉庫管理
git remote -v 檢視遠端伺服器位址和倉庫名稱
git remote show origin 檢視遠端伺服器倉庫狀态

git remote add origin

git@github:xx/xxx.git

添加遠端倉庫位址

git remote set-url origin

[email protected]:xx/xxx.git

設定遠端倉庫位址(用于修改遠端倉庫位址)
git remote rm <repository> 删除遠端倉庫
8. 建立遠端倉庫
git clone --bare xx xxx.git 用帶版本的項目建立純版本倉庫

git remote add

origin git@ github.com:xxx/xx.git

設定遠端倉庫位址
git remote set-head origin master 設定遠端倉庫的HEAD指向master分支
用戶端首次送出
git push -u origin develop 首次将本地develop分支送出到遠端develop分支,并且track

git push <主機名>

<本地分支名> <遠端分支名>

git push 的一般形式
省略遠端分支,表示将本地分支推送到與之存在追蹤關系的分支(通常兩者同名)
git push origin :/refs/for/<branch>

省略本地分支,表示删除遠端的<branch>分支

refs/for 的意義在于我們送出代碼到伺服器之後,

需要經過code review 之後才能進行merge的,而refs/heads 不需要

2. .gitignore

有時候我們可能不希望同步某些檔案,比如.pyc,.o等,但為了友善,我們通常都是直接同步所有本地檔案,這個沖突如何解決呢?

答案就是:建立一個.gitignore檔案,将不需要同步的檔案名全部寫入到該檔案中。

  • 位置:需要同步git的目錄下
  • 作用:将内部列出的檔案不做版本管理(即不進行同步)
  • 建立:

    touch .gitignore

①. 強制過濾

  • /mtk/ : 過濾整個檔案夾
  • *.pyc : 過濾所有.pyc的檔案
  • /mtk/tst.pyc : 過濾指定檔案

②. 強制添加

将某些檔案強制同步到git中

  • !/mtk/
  • !*.pyc

差別在于前面多了個

!

.

PS: 一定要在git push之間建立該檔案,否則,他就失去了應有的作用。

若在.gitignore建立之前就上傳了不必要的檔案(夾),可使用

git rm -r --cached directory
           

指令進行删除緩存區和倉庫的檔案

圖檔來自: www.fishc.com