Git 最全命令总结都在这里了
1. 基本命令
- git diff
不加參數直接輸入 git diff : 尚未暫存的文件更新了哪些部分
git diff --staged : 已暫存文件與最后一次提交的文件差異
git diff --cached : --staged 和 --cached 是同義詞
git diff --check : 它將會找到可能的空白錯誤并將它們為你列出來
- git commit
git commit -m "message": 提交代碼
請記住,提交時記錄的是放在暫存區域的快照。 
任何還未暫存文件的仍然保持已修改狀態,可以在下次提交時納入版本管理。 
每一次運行提交操作,都是對你項目作一次快照,以后可以回到這個狀態,或者進行比較。git commit -m -a "message": 盡管使用暫存區域的方式可以精心準備要提交的細節,但有時候這么做略顯繁瑣。 
Git 提供了一個跳過使用暫存區域的方式, 只要在提交的時候,給 git commit 加上 -a 選項,
Git 就會自動把所有已經跟蹤過的文件暫存起來一并提交。git commit -amend: 修改提交
- git rm
git rm file: 從已跟蹤文件清單中移除(確切地說,是從暫存區域移除), 并連帶從工作目錄中刪除指定的文件git rm -f file: 如果要刪除之前修改過或已經放到暫存區的文件,則必須使用強制刪除選項 -f(譯注:即 force 的首字母)git rm --cached file: 讓文件保留在磁盤,但是并不想讓 Git 繼續跟蹤。
- git mv
git mv README.md README 相當于
mv README.md README
git rm README.md
git add README
不像其它的 VCS 系統,Git 并不顯式跟蹤文件移動操作。 如果在 Git 中重命名了某個文件,倉庫中存儲的元數據并不會體現出這是一次改名操作。 不過 Git 非常聰明,它會推斷出究竟發生了什么。
- git log
在提交了若干更新,又或者克隆了某個項目之后,你也許想回顧下提交歷史。 完成這個任務最簡單而又有效的工具是 git log 命令git log --patch, 它會顯示每次提交所引入的差異(按 補丁 的格式輸出), 
你也可以限制顯示的日志條目數量,例如使用 -2 選項來只顯示最近的兩次提交: git log -p -2git log --stat, 每次提交的簡略統計信息, 可以使用 --stat 選項
git log --relative-date, 使用較短的相對時間而不是完整格式顯示日期(比如“2 weeks ago”)
git log --name-status, 顯示新增、修改、刪除的文件清單
git log --oneline, --pretty=oneline --abbrev-commit 合用的簡寫。
git log --oneline 查看簡要描述
git log --author author_name, 顯示指定作者的提交
git log --grep, 搜索提交說明中的關鍵字
git log -S function_name, 只會顯示那些添加或刪除了該字符串的提交, 
假設你想找出添加或刪除了對某一個特定函數的引用的提交,可以調用以上的夠用了,更多的https://git-scm.com/book/zh/v2/Git-基礎-查看提交歷史git reflog 看到版本號下對應做了什么事(以簡短的方式查看日志)
d735064 HEAD@{0}: commit: add download function
e2eadb1 HEAD@{1}: commit: adapter image module
dd6b511 HEAD@{2}: commit: fix bug
d1dabea HEAD@{3}: commit: add download_videos module
1cb617f HEAD@{4}: commit: update
5e4d8c8 HEAD@{5}: commit: add capture image module
c98f434 HEAD@{6}: commit: update tool
70e5bd7 HEAD@{7}: clone: from http://github.com/wohu/tools.git
- git reset
git reset HEAD [< file >], 取消暫存的文件
- git stash
希望回到以前的版本,但又不想把現有的代碼提交。
git stash 創建臨時工作去
git stash list 查看保存的工作區
git stash apply stash@{1} 應用哪個工作區
git stash pop 應用上一個工作區并且刪除
git stash drop stash@{0} 刪除指定的工作區
git stash clear 刪除所有的工作區
- git checkout
請務必記得 git checkout – < file > 是一個危險的命令。 你對那個文件在本地的任何修改都會消失——Git 會用最近提交的版本覆蓋掉它。 除非你確實清楚不想要對那個文件的本地修改了,否則請不要使用這個命令。
git checkout -- < file >git checkout <branch_name> 用于切換分支git checkout -b dev origin/dev  如果本地沒有 dev 分支,想要基于服務器端 dev 分支創建一個,
但又不想影響到本地的當前分支。可以使用此命令進行本地 dev 分支的創建。
- git remote
運行 git remote 命令, 它會列出你指定的每一個遠程服務器的簡寫。
 git remote -v , 會顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL
wohu@ubuntu-dev:~/git_demo/test_demo$ git remote -v
origin	http://192.168.0.17:3000/wohu/test_demo.git (fetch)
origin	http://192.168.0.17:3000/wohu/test_demo.git (push)
wohu@ubuntu-dev:~/git_demo/test_demo$ 
git remote add < shortname > < url >, 添加一個新的遠程 Git 倉庫,同時指定一個方便使用的簡寫git remote show < remote >, 查看某一個遠程倉庫的更多信息
git remote rename, 修改一個遠程倉庫的簡寫名
git remote rename pb paul,將 pb 重命名為 paulgit remote remove, 移除一個遠程倉庫,你已經從服務器上搬走了或不再想使用某一個特定的鏡像了又或者
某一個貢獻者不再貢獻了——可以使用 git remote remove 或 git remote rm
- git fetch
git fetch < remote >, 這個命令會訪問遠程倉庫,從中拉取所有你還沒有的數據, 執行完成后,
你將會擁有那個遠程倉庫中所有分支的引用,可以隨時合并或查看。
如果你使用 clone 命令克隆了一個倉庫,命令會自動將其添加為遠程倉庫并默認以 “origin” 為簡寫。 
所以,git fetch origin 會抓取克隆(或上一次抓取)后新推送的所有工作。必須注意 git fetch 命令只會將數據下載到你的本地倉庫——它并不會自動合并或修改你當前的工作。 
當準備好時你必須手動將其合并入你的工作。
- git push
要將本地內容提交到遠程倉庫,需要使用 git push 命令。 提供遠程倉庫簡稱,然后提供要推送提交的分支名稱:
git push <遠程倉庫簡稱>  <要推送的分支>
注:我們也加入 -u 選項,git push -u origin master 會使得下次推送提交時只運行 git push 命令即可。
git push origin master, 只有當你有所克隆服務器的寫入權限,并且之前沒有人推送過時,這條命令才能生效。 
當你和其他人在同一時間克隆,他們先推送到上游然后你再推送到上游,你的推送就會毫無疑問地被拒絕。 
你必須先抓取他們的工作并將其合并進你的工作后才能推送。git push origin dev 將本地當前分支推到遠程 dev 分支。git push origin --delete <branchname>, 刪除遠程分支
git push origin :dev 刪除服務器端分支 dev
- git tag
git tag -a <tagName> 添加標簽,-a 代表添加說明,不加也可以 git tag -a <tagName> -m <comment> 添加標簽,-m 是給 -a 添加的說明,不加 -m 則 git 會給出彈框,讓你填寫,
添加 -m 則不會彈出 git tag -d <tagName>  刪除標簽git tag 查看標簽git tag --lits, 列出已有的標簽
git tag -l "v1.8.5", 你也可以按照特定的模式查找標簽。 例如,Git 自身的源代碼倉庫包含標簽的數量超過 500 個。如果只對 1.8.5 系列感興趣,可以運行 git tag -l "v1.8.5" git tag -a v1.4 -m "my version 1.4", 創建附注標簽(annotated)
git show v1.4, 標簽信息和與之對應的提交信息 
git tag v1.4-lw, 創建輕量標簽(lightweight)輕量標簽本質上是將提交校驗和存儲到一個文件中——沒有保存任何其他信息創建輕量標簽,不需要使用 -a、-s 或 -m 選項,只需要提供標簽名字 后期打標簽git tag -a v1.2 9fceb02, 要在那個提交上打標簽,你需要在命令的末尾指定提交的校驗和(或部分校驗和)
共享標簽git push origin < tagname >, 默認情況下,git push 命令并不會傳送標簽到遠程倉庫服務器上。在創建完標簽后你必須顯式地推送標簽到共享服務器上git push origin --tags, 如果想要一次性推送很多標簽,也可以使用帶有 --tags 選項的 git push 命令。 
這將會把所有不在遠程倉庫服務器上的標簽全部傳送到那里使用 git push < remote > --tags 
推送標簽并不會區分輕量標簽和附注標簽, 沒有簡單的選項能夠讓你只選擇推送一種標簽。git tag -d < tagname >, 刪除掉你本地倉庫上的標簽注意上述命令并不會從任何遠程倉庫中移除這個標簽,你必須用 git push < remote > :refs/tags/< tagname >來更新你的遠程倉庫, 上面這種操作的含義是,將冒號前面的空值推送到遠程標簽名,從而高效地刪除它。第二種更直觀的刪除遠程標簽的方式是: git push origin --delete < tagname >
- git branch
git branch  查看本地存在分支
git branch -r	 查看遠程服務器上有多少個分支
git branch -v, 查看每一個分支的最后一次提交
git branch --merged, 查看哪些分支已經合并到當前分支
git branch --no-merged, 查看哪些分支尚未合并到當前分支
git branch --no-merged master,查看哪些分支尚未合并到 master 分支 git branch -a 查看所有本地關聯到的分支(遠端分支也能打印出來,但是關聯如果沒有建立,
那么是不會顯示的,此時我們可以使用 git fetch 拉下來所有分支。git branch < name >, 創建分支,為你創建了一個可以移動的新的指針
git branch -d dev 刪除本地分支 dev(注意:刪除本地分支時,當前所處分支不能是要刪除的該本地分支)。git branch -D dev 強制刪除本地分支 dev(如果 dev 分支當前修改的內容沒有暫存,那么只有強制刪除有效)。git branch -u origin/serverfix, 設置已有的本地分支跟蹤一個剛剛拉取下來的遠程分支,
或者想要修改正在跟蹤的上游分支, 你可以在任意時間使用 -u 或 --set-upstream-to 選項運行 git branch 來顯式地設置git branch -vv, 如果想要查看設置的所有跟蹤分支, 這會將所有的本地分支列出來并且包含更多的信息,
如每一個分支正在跟蹤哪個遠程分支與本地分支是否是領先、落后或是都有。
需要重點注意的一點是這些數字的值來自于你從每個服務器上最后一次抓取的數據。 這個命令并沒有連接服務器,
它只會告訴你關于本地緩存的服務器數據。 如果想要統計最新的領先與落后數字,需要在運行此命令前抓取所有的遠程倉庫。 
可以像這樣做:git fetch --all; git branch -vv git branch -f master HEAD~3
- git checkout
git checkout master, 這條命令做了兩件事。一是使 HEAD 指回 master 分支二是將工作目錄恢復成 master 分支所指向的快照內容 
git checkout -b < newbranchname >, 創建一個新分支后立即切換過去
git checkout -b < branch > < remote >/< branch >, 創建一個新分支后立即切換過去, 并且跟蹤遠程倉庫的分支
- git merge
git merge <branchname>, 在當前分支合并另一個分支的修改當你試圖合并兩個分支時, 如果順著一個分支走下去能夠到達另一個分支,那么 Git 在合并兩者的時候, 只會簡單的將指針向前推進(指針右移),因為這種情況下的合并操作沒有需要解決的分歧——這就叫做 “快進(fast-forward)”git merge origin/dev 將服務器端 dev 分支合并到本地當前分支下。git merge dev 將本地 dev 分支合并到本地當前分支下,這一步之前先 `git checkout branch_name` 切換到要合并的分支上。
- git add
git add 將工作文件修改提交到本地暫存區。git add . 將所有修改過的工作文件提交暫存區(常用)。
- git rebase 變基
詳情: https://git-scm.com/book/zh/v2/Git-分支-變基
- 如何避免每次輸入密碼
git config --global credential.helper cache, 如果你正在使用 HTTPS URL 來推送,Git 服務器會詢問用戶名與密碼。 
默認情況下它會在終端中提示服務器是否允許你進行推送。 如果不想在每一次推送時都輸入用戶名與密碼,你可以設置一個 “credential cache”。 
最簡單的方式就是將其保存在內存中幾分鐘,可以簡單地運行 git config --global credential.helper cache 來設置它。
- git pull
git pull origin dev 拉取服務器端 dev 分支的內容并合并到本地 dev 分支
(一般來說,多人共用一個分支時,如果你有需要提交到服務器的內容,則要先用此命令更新本地分支的內容,
然后再將新的內容提交到服務器)。git fetch origin dev 拉取服務器端 dev 分支的內容,但不合并。
此操作一般是不確定遠端代碼是否存在問題,為保險起見,可先拉取到本地查看,確認無誤后,和合并此代碼到本地的對應分支下。
 git fetch 命令會將遠程倉庫的更改拉取到本地,作為 master 的一個分支,分支的地點是本地與遠程同步的 commit。將 origin/master 分支合并到 master 分支,先完成然后再將本地倉庫內容上傳到遠程倉庫。
 
 此時我們可以將本地倉庫 master 分支 push 到遠程倉庫,遠程倉庫會包含本地的合并:
 
 執行 git pull 更新你的本地倉庫至最新改動。
若本地與遠程都有更改,pull 失敗,就在你的工作目錄中獲取(fetch)并合并(merge) 遠端的改動。
$ git fetch origin master
$ git checkout master
$ git merge origin/master
- git status
git status 查看當前分支的狀態,一般合并分支代碼后,用于檢查是否有沖突
2. 實踐
首先,我們創建 dev 分支,然后切換到 dev 分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout 命令加上 -b 參數表示創建并切換,相當于以下兩條命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用 git branch 命令查看當前分支:
$ git branch
* devmaster
git branch 命令會列出所有分支,當前分支前面會標一個 * 號。然后,我們就可以在 dev 分支上正常提交,比如對 readme.txt 做個修改,加上一行:
echo "Creating a new branch is quick." >> readme.txt
然后提交:
$ git add readme.txt 
$ git commit -m "branch test"
[dev b17d20e] branch test1 file changed, 1 insertion(+)
現在,dev 分支的工作完成,我們就可以切換回 master 分支:
$ git checkout master
Switched to branch 'master'
切換回 master 分支后,再查看一個 readme.txt 文件,剛才添加的內容不見了!因為那個提交是在 dev 分支上,而 master 分支此刻的提交點并沒有變:
現在,我們把 dev 分支的工作成果合并到 master 分支上:
$ git merge dev
Updating d46f35e..b17d20e
Fast-forwardreadme.txt | 1 +1 file changed, 1 insertion(+)
git merge 命令用于合并指定分支到當前分支。合并后,再查看 readme.txt 的內容,就可以看到,和 dev 分支的最新提交是完全一樣的。
注意到上面的 Fast-forward 信息,Git 告訴我們,這次合并是“快進模式”,也就是直接把 master 指向 dev 的當前提交,所以合并速度非常快。當然,也不是每次合并都能 Fast-forward,我們后面會講其他方式的合并。
 合并完成后,就可以放心地刪除 dev 分支了:
$ git branch -d dev
Deleted branch dev (was b17d20e).
刪除后,查看 branch,就只剩下 master 分支了:
$ git branch
* master
因為創建、合并和刪除分支非常快,所以 Git 鼓勵你使用分支完成某個任務,合并后再刪掉分支,這和直接在 master 分支上工作效果是一樣的,但過程更安全。
參考:
 https://gitbook.cn/books/5ebca21b9b907c12334b6287/index.html
總結
以上是生活随笔為你收集整理的Git 最全命令总结都在这里了的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 2022-2028年中国耐二甲醚橡胶密封
- 下一篇: 2022-2028年中国聚氨酯结构胶行业
