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