git的常用命令,git常用命令
如何提交代碼到遠程庫
代碼提交一般有五個步驟:
1. 查看目前代碼的修改狀態
提交代碼之前,首先應該檢查目前所做的修改,運行git status命令
- 已暫存 (Changes to be committed)
- 已修改 (Changes not staged for commit)
- 未跟蹤 (Untracked files)
2.查看代碼修改內容
git diff <file>
比較某檔案與最近提交節點的差異。
注意:如果該檔案已暫存,那麼應該使用git diff –cached <file>
還可以比較某檔案在commit_id1,commit_id2的差異。
git diff <commit_id1> <commit_id2> <file>
如果省略後面commit_id2,則預設表示與上一提交commit_id比較
3.暫存需要提交的檔案
如果是建立或者修改的檔案
git add <file>
如果是刪除的檔案
git rm <file>
4.提交已暫存的檔案
git commit -m "first commit"
5.同步到配置程式庫伺服器
同步到伺服器前, 先需要將伺服器代碼同步到本地
git pull origin master
如果執行失敗,就按照提示還原有衝突的檔案,然後再次嘗試同步。
git push origin HEAD:master
git中的三種狀態以及它們之間的轉換
命令樣本:
git reset --hard origin master 或者 git reset --hard HEAD
git status -s
目前你或許已經瞭解,git中的檔案可以有三種不同的狀態:
通過運行git status可以看到關於檔案的描述以及檔案的狀態。
運行 git add <file>命令可以將檔案從未暫存狀態移動到暫存並準備提交的狀態, 或者使用git add .命令一次性暫存所有的檔案。
通過運行git status -s命令可以看到狀態圖,其中-s是簡短(short)的意思(個人認為),最終輸出結果:
顯然,git status不顯示已經提交了的檔案,你可以使用git log命令來查看。
日誌輸出參數
命令樣本:
git log --oneline --graph
下面是經常使用的參數
| 選項 |
含義 |
| --author="fireway" |
只顯示某個使用者的提交任務 |
| --name-only |
只顯示變更檔案的名稱 |
| --oneline |
將提交資訊壓縮到一行顯示 |
| --graph |
顯示所有提交的依賴樹 |
| --reverse |
按照逆序顯示提交記錄(最先提交的在最前面) |
| --after |
顯示某個日期之後發生的提交 |
| --before |
顯示發生某個日期之前的提交 |
例如,要求在每周五提交周報, 所以我每周五都運行一下這個指令:
git log --author="fireway" --after="1 week ago" --oneline
協助命令:
man git log
如果這些都不好用,git還有一個--pretty 參數,可以用來建立進階自訂輸出。
查看檔案的詳細變更
命令樣本:
git -log -p <file>
不僅顯示提交說明、提交者以及提交日期,還會顯示這每次提交實際修改的內容。
然後你就可以使用Vim中常用的檢索技巧來尋找關鍵字
查看檔案中指定位置的變更
命令樣本:
git log -L 1,1:<file>
你可以使用git blame <file>追查出檔案中每一行是由誰變更的,但是這個命令無法提供足夠的資訊。
git log 提供了一個 -L 的選項。這個選項允許指定檔案中的某些行。git只會輸出與這些行的變更日誌,這有點像帶焦點的 git log -p 。
查看尚未合并的變更
命令樣本:
git log --no-merges master..
--no-merges 標誌意味著只顯示沒有合并到任何分支的變更。
master..選項,意思是指顯示沒有合并到master分支的變更(在master後面必須有..)。
查看其他分支中的檔案
命令樣本:
git show <branch>:<file>
用這個命令可以很方便地查看其他分支上的檔案而無需切換到那個分支。
如果你想查看另一個分支上檔案與當前分支上檔案的差異,只要運行下面的命令就可以了:
git diff <branch> <file>
修複而非建立提交
命令樣本:
git commit --amend
假設提交之後,你意識到自己犯了一個拼字錯誤。你可以重新提交一次,並附上描述你的錯誤的提交資訊。
如果提交尚未推送到遠程分支,那麼按照下面步驟簡單操作一下就可以了:
重設檔案
重設是讓檔案回到git曆史中的一個特定版本。
在git中,有3種類型的重設。
| 命令 |
說明 |
git reset --hard commit_id |
回退到一個特定的曆史版本。 丟棄這次提交之後的所有變更。 |
git reset commit_id |
復原到一個特定的曆史版本。 將這個版本之後的所有變更移動到“未暫存”的階段。這也就意味著你需要運行git add . 和git commit -m "" 才能把這些變更提交到倉庫。 |
git reset --soft commit_id |
復原到一個特定的曆史版本。 將這次提交之後所有的變更移動到暫存並準備提交階段。意味著你只需要運行git commit -m ""就可以把這些變更提交到倉庫。 |
如果想清除變更記錄,可以使用清理命令:
git reset --hard HEAD
簽出部分檔案
如果你想取消某些檔案在本地的變更,而同時保留另外一些檔案在本地的變更,一個比較簡單的方法是通過 git checkout <file> 簽出那些你想取消本地的變更的檔案。
正如前面提到的那樣,你也可以從其他分支簽出檔案的不同版本。
git checkout <branch> <file>
或者之前的commid_id中籤出
git checkout <commit_id> <file>
你應該注意到了簽出的檔案處於“暫存並準備提交”的狀態。
如果想回到未暫存的狀態,需要執行一下 git reset HEAD <file> 。然後再次執行 git checkout <file>, 檔案回到了初始狀態。
撤銷而不產生提交資訊
命令樣本:
git revert -n
如果打算撤銷之前一次或者兩次的提交,查看這些提交都做了哪些變更,哪些變更又有可能引發問題,這個命令非常方便。
通常,git revert 會自動將回退的檔案提交到倉庫,需要你寫一個新的提交資訊。
-n 標誌告訴git先別急著提交,因為我只是想看一眼罷了。
參考