檢視當前所屬分支:
git branch
本地分支改名:
# 當前分支
git branch -m # 非當前分支
git branch -m
檢視git graph圖:
git log --graph --decorate --oneline --all
對照分支關係圖梳理分支關係,在trunk based的分支模型中非常實用。
切換分支:
git checkout
基於當前分支建立新分支並切換:
git checkout -b
基於某一分支或提交建立新分支並切換:
git checkout -b
暫時將當前工作壓棧:
如果當前分支有未完成的工作,切換分支會失敗。一種解決辦法是線暫時commit,並在提交記錄中標記wip
或者直接用.
這麼乙個最短記錄,其中 wip 是 work in progress 的縮寫。另一種辦法是暫時將當前修改壓棧,等下次切換回來的時候彈棧就好了。這樣做的好處是不會汙染提交記錄。
# 壓棧
git stash
# 出棧
git stash pop
# 檢視棧中的記錄
git stash list
有時候彈出棧頂的時候,本地**已經修改過了,會發生衝突。這個時候即使解決完了衝突,棧頂的記錄也不會消失,解決辦法是手動刪除棧內記錄:
git stash drop
預設是stash@
也就是棧頂。
重新設定當前分支分叉位置,也叫變基:
git rebase
提倡加入-i
引數,可以同時合併、刪除、重新編輯本分支歷史提交記錄,只需要將每一條提交記錄前面的pick修改為對應的squash、drop、edit等即可。
變基的時候,有時候會提示發生衝突,手動解決衝突之後,繼續變基操作:
git rebase --continue
有時想要直接忽略掉後續衝突的提交,使用以下命令:
git rebase --skip
有時候並不想忽略衝突提交,誤操作了找回被忽略的提交:
# 首先檢視操作記錄,找到變基之前的最後一次提交
git reflog
# 以此為基礎,建立新分支 recovery 用於重新解決衝突
git checkout -b recovery ... 解決衝突並continue
# 切換回分支,重新變基
git checkout git rebase recovery
# 刪除無用分支
git branch -d recovery
檢視每次提交修改的檔案列表:
git log --name-status
列出某一檔案的修改記錄:
git log
檢視某一次提交的修改:
git show
預設檢視最後一次提交的修改。
增量修改最後一次提交:
git commit --amend
如果只改動**,不需要改動提交資訊的話:
git commit --amend --no-edit
ps: 如果想要增量修改以前的某次提交,需要兩次rebase -i
操作:
首先提交補丁成乙個commit,然後第一次rebase -i
移動此commit到需要修改的記錄之後,並注意解決衝突;
然後第二次rebase -i
合併進前一次的提交之中,需要用到的編輯選項是f
,也就是fixup
,這樣提交記錄會和前一次保持不變。
注意本分支rebase過之後,基於此分支的分支都會變,需要重新rebase本分支。對於不需要的舊commit,直接使用編輯選項d
,也就是drop
拋棄即可。
撤回最近n次提交:
git reset head~n
預設撤回到工作區(workspace),撤回到暫存區需要加引數--soft
,直接刪除需要加--hard
。
比較修改前後的變化。
對比工作區與暫存區:
git diff
對比暫存區與歷史記錄:
git diff --cached
對比工作區與某一歷史記錄的變化(如head~1):
git diff head~2
對比某檔案(如a.txt)在工作區與某一歷史記錄的變化(如head~2):
git diff head~2 --a.txt
對比某檔案(如a.txt)在某兩個歷史記錄之間的變化(如head2和head5):
git diff head~2 head~5 --a.txt
設定提交時間戳
有時候發現一處修改應該及早提交,如果直接commit然後rebase調整順序的話會發現:雖然該提交的順序前移了,但是顯示的提交時間仍然是當前提交時間。修改時間戳的辦法是提交的時候加入--date=
選項:
git commit --date=-m
注意時間戳的格式要保持正確,可以直接複製git log
中某個時間戳然後修改。
對於最後一次的提交,要修改時間戳,可以直接用--amend --date=
來設定。
檢視當前資料夾大小:
du -hs .
檢視子資料夾大小:
du -hs *
從提交記錄中清理大檔案:
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch ' --prune-empty --tag-name-filter cat -- --all
刪除本地檔案殘留**空間:
git reflog expire --expire=now --all
git gc --prune=now
git常用操作
git是一款分布式的版本控制軟體,相比svn,功能更強大,自然而然操作更複雜一些。git在本地也是以git版本庫的形式管理,而svn在本地管理的僅是乙個版本庫的副本。很明顯的乙個不同點 git你可以在本地做一些修改,然後commit到本地的版本庫,最後push到伺服器,而svn只要一commit,更...
Git常用操作
有時候我們需要修改之前提交的時候的說明資訊,沒有操作命令可以直接完成,但是使用rebase命令可以實現。例如我們要修改倒數第二次的提交的說明資訊 git rebase i head 3 注意 這裡head 後面跟著的是3而不是2,因為這裡指的是要修改的提交的父提交。之後會進入到文字編輯介面,如下圖 ...
Git常用操作
這裡記錄目前我最常用的操作。因為是最常用的,就不包括什麼建立倉庫,設定使用者資訊啊,這種設定一次的了。先上一張圖 1.分支管理 檢視本地分支 git branch 檢視所有分支 本地 遠端 git branch a 建立分支 git branch 切換分支 git checkout 建立 切換分支 ...