$ git log [-- file | path]
複製代碼
不加-- file或path參數查看全部文件。增長僅查看指定文件或文件夾。git
該命令會展現 commit的完整SHA、做者、日期、commit信息描述。以下圖。 github
$ git log --all
複製代碼
$ git log --graph --oneline -n
複製代碼
--graph 展現圖形化log --oneline 簡寫commit信息 -n 傳入一個數字,顯示n條記錄 緩存
$ git log --stat
複製代碼
$ git log -p [-- file]
複製代碼
$ git log -p -1 [-- file]
複製代碼
注意:git log -p 後面還能夠加commit-hash,做用等同於 git show commit-hash。顯示一次提交的修改內容。
bash
$ git commit --amend
複製代碼
注意:該命令另外一個做用,能夠將暫存區的修改提交到最後一次commit中
app
執行後,會觸發命令行文本編輯。# 爲註釋。修改是隻需前面的message修改,以後使用命令行文本編輯保存便可。效果以下圖。編輯器
step0:查找到想修改message的上一級commit的 commit-hashui
step1:使用下面命令,調起編輯頁面spa
$ git rebase -i [要更改的commit的上一級commit]
複製代碼
修改 add another line 的commit描述,以下:命令行
1 pick 4ee8fd3 add a line
2 edit 5a75e01 add another line
複製代碼
git commit --amend
複製代碼
[分離頭指針 aa93824] add another line:change-message
Date: Sun Sep 15 19:41:13 2019 +0800
1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/master.
複製代碼
git rebase 工做的過程當中,就是用了分離頭指針。rebase 意味着基於新 base 的 commit 來變動部分 commits。它處理的時候,把 HEAD 指向 base 的 commit,此時若是該 commit 沒有對應 branch,就處於分離頭指針的狀態,而後從新一個一個生成新的 commit,當 rebase 建立完最後一個 commit 後,結束分離頭狀態,Git 讓變完基的分支名指向 HEAD。
3d
$ git rebase -i [要更改的commit的上一級commit]
複製代碼
[分離頭指針 978c6bc] add a line
Date: Sun Sep 15 19:40:51 2019 +0800
1 file changed, 2 insertions(+)
Successfully rebased and updated refs/heads/master.
複製代碼
方法步驟與四、怎麼把連續的多個commit整理成一個
相同,不一樣之處須要將不間隔的commit,移動到上下關係的位置。
$ git diff
#比較具體的文件或者路徑
$ git diff -- [filename/pathname]
複製代碼
$ git diff --cached
複製代碼
或者
$ git diff --staged
複製代碼
git diff commit-id1 commit-id2 -- <file>...
複製代碼
$ git reset HEAD
複製代碼
git reset 有三個參數
--soft 這個只是把 HEAD 指向的 commit 恢復到你指定的 commit,暫存區 工做區不變
--hard 這個是把 HEAD,暫存區,工做區 都修改成 你指定的 commit 的時候的文件狀態
--mixed 這個是不加時候的默認參數,把 HEAD,暫存區 修改成 你指定的 commit 的時候的文件狀態,工做區保持不變
複製代碼
線上代碼,一般會放在遠程分支,這是要回滾某次代碼,須要使用git revert。由於git reset 方法會改變改變提交歷史,共同協做的狀況下,看能會致使多個客服端倉庫進行解決衝突。使用git revet方式進行回滾會解決這種問題。
複製代碼
$ git revert commmmit-hash
$ git revert HEAD~1
複製代碼
# 不連續/連續
$ git revert commit-hash1,commit-hash2,commit-hash3
$ git revert HEAD~3,HEAD~2,HEAD~1
# 連續
# 左開右閉區間(commit-hash1-pre,commit-hash3]
$ git revert commit-hash1-pre...commit-hash3
複製代碼
$ git reset HEAD -- <file>...
複製代碼
$ git checkout -- <file>...
複製代碼
注意:2.23版本,爲了區分checkout恢復代碼和切分支,新版本將其拆分紅 git restore用於丟棄工做區的改動。git switch 用於切分支
恢復工做區用 checkout/restore,恢復暫存區用 reset。
$ git rm <file>g
複製代碼
$ git stash
複製代碼
$ git stash list
複製代碼
$ git stash pop [stash_id]
複製代碼
$ git stash apply
複製代碼
$ git stash drop [stash_id]
複製代碼
git stash clear
複製代碼
.gitignore
複製代碼
以斜槓「/」開頭表示目錄;
以星號「*」通配多個字符;
以問號「?」通配單個字符;
以方括號「[]」包含單個字符的匹配列表;
以歎號「!」表示不忽略(跟蹤)匹配到的文件或目錄;
複製代碼
注意:.gitignore只能忽略那些原來沒有被track的文件,若是某些文件已經被歸入了版本管理中,則修改.gitignore是無效的。那麼解決方法就是先把本地緩存刪除(改變成未track狀態)
git rm -r --cached .
git add .
git commit -m 'commit-message'
複製代碼