Git第二部分:常見使用場景

一、 怎麼查看版本演變歷史

  • 1)、查看全部當前分支的歷史
$ git log [-- file | path]
複製代碼

不加-- file或path參數查看全部文件。增長僅查看指定文件或文件夾。git

該命令會展現 commit的完整SHA、做者、日期、commit信息描述。以下圖。 github

  • 2)查看全部分支的歷史
$ git log --all 
複製代碼
  • 3)顯示效果參相關參數
$ git log --graph --oneline -n
複製代碼

--graph 展現圖形化log --oneline 簡寫commit信息 -n 傳入一個數字,顯示n條記錄 緩存

  • 4)僅顯示簡要的增改行數統計
$ git log --stat
複製代碼

  • 5)查看某個文件的全部修改
$ git log -p [-- file]
複製代碼
  • 6)查看某個文件最後一次修改
$ git log -p -1 [-- file]
複製代碼

注意:git log -p 後面還能夠加commit-hash,做用等同於 git show commit-hash。顯示一次提交的修改內容。bash

二、怎麼修改最新的commit的message

  • 對最近一次的commit信息進行修改
$ git commit --amend
複製代碼

注意:該命令另外一個做用,能夠將暫存區的修改提交到最後一次commit中app

執行後,會觸發命令行文本編輯。# 爲註釋。修改是隻需前面的message修改,以後使用命令行文本編輯保存便可。效果以下圖。編輯器

三、怎麼修改老的commit的message

  • step0:查找到想修改message的上一級commit的 commit-hashui

  • step1:使用下面命令,調起編輯頁面spa

$ git rebase -i [要更改的commit的上一級commit]
複製代碼

  • step2:將 pick修改成edit

修改 add another line 的commit描述,以下:命令行

1 pick 4ee8fd3 add a line
2 edit 5a75e01 add another line
複製代碼
  • step3: 經過如下命令,修改message。
git commit --amend 
複製代碼
  • step4:git rebase --continue保存修改後。
  • step5:若是修改有多個,須要 step三、step4重複執行。成功後信息,以下
[分離頭指針 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

四、怎麼把連續的多個commit整理成一個

  • step0:查找到想修改的 commit-hash
  • step1:調起編輯頁面
$ git rebase -i [要更改的commit的上一級commit]
複製代碼
  • Step2:將 pick修改成squash。:wq保存
  • Setp3: 以後在編輯器填寫,描述信息。 :wq保存
  • Step4:成功後的信息
[分離頭指針 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整理成一個相同,不一樣之處須要將不間隔的commit,移動到上下關係的位置。

六、怎麼比較工做區和暫存區所含文件的差別

$ git diff
#比較具體的文件或者路徑
$ git diff -- [filename/pathname]
複製代碼

七、怎麼比較暫存區和HEAD所含文件的差別

$ git diff --cached
複製代碼

或者

$ git diff --staged
複製代碼

八、看看不一樣提交的指定文件的差別

git diff commit-id1 commit-id2 -- <file>...
複製代碼

九、如何讓暫存區恢復成和HEAD的同樣

$ git reset HEAD
複製代碼
git reset 有三個參數
--soft 這個只是把 HEAD 指向的 commit 恢復到你指定的 commit,暫存區 工做區不變
--hard 這個是把 HEAD,暫存區,工做區 都修改成 你指定的 commit 的時候的文件狀態
--mixed 這個是不加時候的默認參數,把 HEAD,暫存區 修改成 你指定的 commit 的時候的文件狀態,工做區保持不變
複製代碼

十、如何回滾線上代碼 git revert

線上代碼,一般會放在遠程分支,這是要回滾某次代碼,須要使用git revert。由於git reset 方法會改變改變提交歷史,共同協做的狀況下,看能會致使多個客服端倉庫進行解決衝突。使用git revet方式進行回滾會解決這種問題。
複製代碼
  • 1)回退某次commit
$ git revert commmmit-hash

$ git revert HEAD~1
複製代碼
  • 2)回退多個commit
# 不連續/連續
$ 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。

1三、正確刪除文件的方法

$ git rm <file>g
複製代碼

1四、開發中臨時加塞了緊急任務怎麼處理

  • 1)將當前工做區內容存放到"堆棧"中
$ git stash 
複製代碼
  • 2)查看stash中存放的信息
$ git stash list 
複製代碼
  • 3)把"堆棧"裏面的內容彈出到工做區中,同時丟棄"堆棧"中最新的信息
$ git stash pop [stash_id]
複製代碼
  • 4)把"堆棧"裏面的內容彈出到工做區中,同時"堆棧"中信息還在
$ git stash apply 
複製代碼
  • 5)刪除一個存儲的進度。若是不指定stash_id,則默認刪除最新的存儲進度。
$ git stash drop [stash_id]
複製代碼
  • 6)刪除全部存儲的進度
git stash clear
複製代碼

1五、如何指定不須要Git管理的文件

.gitignore
複製代碼
  • 配置語法
以斜槓「/」開頭表示目錄;
以星號「*」通配多個字符;
以問號「?」通配單個字符;
以方括號「[]」包含單個字符的匹配列表;
以歎號「!」表示不忽略(跟蹤)匹配到的文件或目錄;
複製代碼
  • .gitignore模板

Github連接

注意:.gitignore只能忽略那些原來沒有被track的文件,若是某些文件已經被歸入了版本管理中,則修改.gitignore是無效的。那麼解決方法就是先把本地緩存刪除(改變成未track狀態)

git rm -r --cached .
git add .
git commit -m 'commit-message'
複製代碼
相關文章
相關標籤/搜索