Git 從入門到放棄

舞動乾坤發表於2019-03-03

Git 從入門到放棄

GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/git-common-command/ 

Git遠端操作詳解 :https://microzz.com/2017/05/06/git/ 

一篇文章,教你學會Git : https://juejin.im/post/599e14875188251240632702 

如何在 Git 中使用撤消操作 :https://egoist.moe/2015/10/04/how-to-undo-with-git/

git使用中碰到的問題,持續更新 :http://blog.csdn.net/a420344/article/details/51792303

git pull命令: http://www.yiibai.com/git/git_pull.html

命令別名設定:

 gitk --all &   //開啟git 圖形化介面
 git fetch --all  //拉取遠端程式碼不自動merge,安全操作    
 git remote -v  //檢視遠端地址
 git checkout -b dbg_master  -t origin/master   //基於遠端master分支建立dbg_master分支
 git merge --squash <branch>:將多次提交合併成一個,然後git add .;git commit -m "XXXXX";git push origin XXXX...
 
git push                         # push所有分支
git push origin master           # 將本地主分支推到遠端主分支
git push -u origin master        # 將本地主分支推到遠端(如無遠端主分支則建立,用於初始化遠端倉庫)
git push origin <local_branch>   # 建立遠端分支, origin是遠端倉庫名
git push origin local-branch     #將當前local-branch 分支推送一個遠端local-branch分支,本地分支和遠端分支同名
git push origin <local_branch>:<remote_branch>  # 建立遠端分支,將local_branch程式碼推送到remote_branch分支

git push origin master:dev   #將本地master分支推到遠端origin/dev分支

git push origin :<remote_branch>  #先刪除本地分支(git br -d <branch>),然後再push刪除遠端分支
 
 對最近一次commit的進行修改註釋:git commit -a –amend

 Git pull 強制覆蓋本地檔案
  git fetch --all  
  git reset --hard origin/master 
  git pull


git remote add origin https://git.oschina.net/duandaoke/os.git要求服務已經建立同名倉庫
git remote # 顯示遠端倉庫
git remote -v # 顯示遠端倉庫詳情
git remote show origin # 顯示 origin 遠端庫的詳情



rebase的衝突解決

   解決完一個補丁應用的衝突後,執行下面命令標記衝突已解決(也就是把修改內容加入快取) 
      git add -u   //注:-u 表示把所有已track的檔案的新的修改加入快取,但不加入新的檔案。
   然後執行下面命令繼續rebase:
      git rebase --continue     //有衝突繼續解決,重複這這些步驟,直到rebase完成。
   如果中間遇到某個補丁不需要應用,可以用下面命令忽略:
      git rebase --skip 
   如果想回到rebase執行之前的狀態,可以執行:
      git rebase --abort    //放棄rebase  
   注:rebase之後,不需要執行commit,也不存在新的修改需要提交,都是git自動完成。



cherry-pick的衝突解決

   解決完一個補丁應用的衝突後,執行下面命令標記衝突已解決(也就是把修改內容加入快取) 
      git add -u   //注:-u 表示把所有已track的檔案的新的修改加入快取,但不加入新的檔案。
   然後執行下面命令繼續rebase:
      git cherry-pick --continue     //有衝突繼續解決,重複這這些步驟,直到cherry-pick完成。
   如果中間遇到某個補丁不需要應用,可以用下面命令忽略:
      git cherry-pick --skip 
   如果想回到rebase執行之前的狀態,可以執行:
      git cherry-pick  --abort    //放棄cherry-pick
   注:cherry-pick之後,不需要執行commit,也不存在新的修改需要提交,都是git自動完成。

  
       手動編輯衝突的檔案,使其內容和master_mlc分支上的內容一致, 
   然後git add此檔案,最後執行git cherry-pick –continue即可。 


1、git刪除遠端分支
git push origin :branch-name //origin前面必須有空格,表示push一個空分支到遠端分支,即可刪除遠端分支。注意:這個操作需要擁有force push的許可權
2、清空git暫存區
git reset HEAD  //可以清空之前git add 的內容複製程式碼

   git clean命令用來從你的工作目錄中刪除所有沒有tracked過的檔案.
   git clean經常和git reset --hard一起結合使用. 記住reset隻影響被track過的檔案, 所以需要clean來刪除沒有track過的檔案. 結合使用這兩個命令能讓你的工作目錄完全回到一個指定的<commit>的狀態.
用法


刪除當前目錄下沒有被track過的檔案和資料夾.
   git clean -xf


下面的例子要刪除所有工作目錄下面的修改, 包括新新增的檔案. 假設你已經提交了一些快照了, 而且做了一些新的開發.
1
2git reset --hard
git clean -df
執行後, 工作目錄和快取區回到最近一次commit時候一摸一樣的狀態, git status會告訴你這是一個乾淨的工作目錄, 又是一個新的開始了.複製程式碼

git config --global gui.encoding utf-8    //在git GUI中使用UTF-8編碼     複製程式碼
//git 回滾到之前某一commit
git reset –hard 8ff24a6803173208f3e606e32dfcf82db9ac84d8


在使用Git的時候,經過幾次提交後,發現需要回退到早些時候的狀態.例如: 
7edb8524a xxxxxxxxxxxxxxxxxx 
83dae5691 xxxxxxxxxxxxxxxxxx 
45eadd642 xxxxxxxxxxxxxxxxxx 
657834ade xxxxxxxxxxxxxxxxxx
假設現在處於7edb8524a 狀態,現在我想回退到657834ade時的狀態,此時可以 
git reset –hard 7edb8524a 
然後 
git reset –soft 657834ade 
會將之間的修改全部進行revert,然後在進行add commit操作就行了.
另外許可權足夠的話,可以從657834ade 拉一個分支出來,然後將遠端分支 
刪除,再將拉出來的分支push到遠端倉庫上,成為原來的分支,也可以實現回退到 
657834ade 的目的.此方法不會保留中間的各種修改資訊和狀態.


根據–soft –mixed –hard,會對working tree和index和HEAD進行重置:
    git reset –mixed:此為預設方式,不帶任何引數的git reset,即時這種方式,它回退到某個版本,只保留原始碼,回退commit和index資訊
    git reset –soft:回退到某個版本,只回退了commit的資訊,不會恢復到index file一級。如果還要提交,直接commit即可
    git reset –hard:徹底回退到某個版本,本地的原始碼也會變為上一個版本的內容
複製程式碼
已經push
對於已經把程式碼push到線上倉庫,你回退原生程式碼其實也想同時回退線上程式碼,回滾到某個指定的版本,線上,線下程式碼保持一致.你要用到下面的命令

revert
git revert用於反轉提交,執行evert命令時要求工作樹必須是乾淨的.
git revert用一個新提交來消除一個歷史提交所做的任何修改.
revert 之後你的原生程式碼會回滾到指定的歷史版本,這時你再 git push 既可以把線上的程式碼更新.(這裡不會像reset造成衝突的問題)

revert 使用,需要先找到你想回滾版本唯一的commit標識程式碼,可以用 git log 或者在adgit搭建的web環境歷史提交記錄裡檢視.
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
通常,前幾位即可
git revert c011eb3

git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit
看似達到的效果是一樣的,其實完全不同.

複製程式碼

如果當前分支與遠端分支存在追蹤關係,git pull就可以省略遠端分支名。$ git pull origin
Shell上面命令表示,本地的當前分支自動與對應的origin主機”追蹤分支”(remote-tracking branch)進行合併。如果當前分支只有一個追蹤分支,連遠端主機名都可以省略。$ git pull
Shell上面命令表示,當前分支自動與唯一一個追蹤分支進行合併。如果合併需要採用rebase模式,可以使用–rebase選項。$ git pull --rebase <遠端主機名> <遠端分支名>:<本地分支名>
Shellgit fetch和git pull的區別git fetch:相當於是從遠端獲取最新版本到本地,不會自動合併。$ git fetch origin master
$ git log -p master..origin/master
$ git merge origin/master
Shell以上命令的含義:首先從遠端的origin的master主分支下載最新的版本到origin/master分支上然後比較本地的master分支和origin/master分支的差別最後進行合併上述過程其實可以用以下更清晰的方式來進行:$ git fetch origin master:tmp
$ git diff tmp 
$ git merge tmp
Shell2. git pull:相當於是從遠端獲取最新版本並merge到本地git pull origin master
Shell上述命令其實相當於git fetch 和 git merge
在實際使用中,git fetch更安全一些,因為在merge前,我們可以檢視更新情況,然後再決定是否合併。
複製程式碼

合理的命令別名設定可以大大減少輸入,有助於提高工作效率,建議遵守下述別名設定:

git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.st status
git config --global alias.rb rebase
git config --global alias.ll “log --oneline --decorate --color”
git config --global alias.lc “log --graph --color”          複製程式碼

正確的回車換行設定,避免 Unix 和 Windows 下開發的回車換行的轉換問題。

(Windows 下)

git config –global core.autocrlf true

git config –global core. safecrlf warn

(Linux 下)

git config –global core.autocrlf input

git config –global core. safecrlf warn

Git 從入門到放棄

Git 從入門到放棄

這篇文章的目的是給經常使用git管理專案提供一個有益的提醒。如果你是git新手,可以先閱讀文後的引用部分,然後在回頭閱讀此篇文章。在介紹git命令之前,你可以先看看來自 on-my-zsh 提供的別名。

基本命令

  • git config --global user.name "Your Name"
  • git config --global user.email "youremail@example.com"
  • git config --global core.editor <your favorite editor here>
    • Ex: git config --global core.editor vim
  • git init:初始化一個repo,初始化本地git倉庫(建立新倉庫)

Commit 結構

  • git status(gst):檢視 repo 狀態
  • 工作區:
    • .git 目錄
    • 暫存區
    • 工作目錄

Git 從入門到放棄

  • git add <filename>(ga):新增一個檔案到暫存區
  • git add .(gaa):新增所有檔案到暫存區
  • git add *.js:新增所有字尾為js的檔案到暫存區
  • git rm --cached <file>:從暫存區刪除一個新檔案
  • git commit -m "My first commit"(gcmsg):建立一次帶 message 的提交
  • git commit -v -a(gca):
    • -v是 verbose 的縮寫,會在底部顯示差異資訊和更多有意義的資訊
    • -a 類似於 git add .,會新增所有被修改和刪除的檔案,但會忽略新建立的檔案
  • git help <command>:檢視對應命令的幫助手冊
  • git log(glg,glgg,glo, glog):檢視專案的提交歷史

暫存區管理

  • git reset HEAD <filename>(grh):從暫存區刪除一個被修改的檔案
  • git reset HEAD(grh):從暫存區刪除所有被修改的檔案
  • git checkout <filename>(gco):從暫存區刪除一個被修改的檔案,並撤銷檔案的更改 //
    git checkout .
  • git commit -m "My first commit" --amend:新增檔案/更改在暫存區的最後一次提交
  • git commit -v -a --amend(gca!):新增檔案/更改在暫存區的最後一次提交
  • .gitignore:告訴git,哪些檔案不被加入版本跟蹤
    • 可以使用 git add <filename> -f 命令新增一個不被版本跟蹤的檔案
  • git diff <filename>(gd):檢視基於當前檔案的最後一次提交的更改差異
  • git diff (gd):檢視基於所有檔案的最後一次提交的更改差異
  • git reset HEAD~2 --soft:從專案提交歷史中刪除最近兩次提交,但不丟棄檔案的更改
  • git reset HEAD~2 --hard:從專案提交歷史中刪除最近兩次提交,但會丟棄檔案的更改和在(最後兩次)提交中建立的新檔案
  • git reset <commit> --soft --hard
    • --soft:將所有被更改的檔案回溯到“待提交”狀態
    • --hardcommit 之後,對被git追蹤的檔案的任何更改都被丟棄
  • git reflog:顯示包括”被撤銷”在內的所有提交
  • git merge <commit hash>:重新提交(restore the commit)
  • git clean -f:刪除工作目錄中不被git進行版本追蹤的檔案

Stashed & BranchesStash

  • git stash(gsta):將所有暫存區的檔案移動到“儲藏區”,類似於另一種型別的工作區
  • git stash list:檢視儲藏佇列(Stash lists)
  • git stash apply:將最近一次儲藏恢復到暫存區(可以用類似 git stash apply stash@{num}(num從0開始計數) 的命令來使用在佇列中的任意一個儲藏(stashes))
  • git stash clear:清空儲藏佇列
  • git stash save "name of the stash":為儲藏設定命名
  • git stash pop(gstp):將最近一次儲藏恢復到暫存區並從儲藏佇列刪除此儲藏
  • git stash drop(gstd):從儲藏佇列刪除最近一次儲藏(stash@{0})(git stash drop stash@{num} 從儲藏佇列刪除指定儲藏)

Branch

  • git checkout -b dev(gco):建立 dev 分支並從當前分支切換到 dev 分支 //
    git checkout -b dbg_master -t origin/master //基於master分支建立dbg_master分支
  • git branch(gb):檢視所有分支
  • git checkout master(gcm):切換到主分支
  • git merge <branch>(gm):合併分支
  • git rebase master:先將 master 上的更改合併到當前分支,再新增當前分支的更改。如果有衝突,解決衝突後加 --continue 引數繼續合併
  • git branch -d <branch>: 刪除分支,-D 則強制刪除分支
  • git merge <branch> --squash:將多次提交合併成一個,其流程如下:
# Go to the `master` branch
git checkout master
# Create a temp branch
git checkout -b temp
# Merge the feature/x branch into the temp using --squash
git merge feature/x --squash
# See the new modifications/files in the Staging Area
git status
# Create the unified commit
git commit -m "Add feature/x"
# Delete the feature/x branch
git branch -D feature/x
複製程式碼
  • rebase 和 merge 的區別:
    • rebase:
      • 提交歷史(的展示)是線性的
      • 缺點:會刪除最近一個 commit,然後建立一次新的 commit
      • 如果已提交到遠端,不要使用 rebase
    • merge:
      • 提交歷史(的展示)是分叉的
      • 對於兩個分支的合併,會建立一個次新的 commit

遠端倉庫管理

  • git remote add <name> <url>:新增一個將被追蹤的遠端倉庫
  • git remote rm <name>:移除一個遠端倉庫
  • git push <remote> <remote-branch>(gp,ggp):將當前分支的本地 commit 推送到遠端倉庫
  • git fetch <remote> <remote-branch>:拉取遠端倉庫的最新 commit 到當前(本地)分支(<remote>/<branch>),不會合並
  • git pull <remote> <remote-branch>(gl,ggl):拉取遠端倉庫的最新 commit 到當前(本地)分支,並自動 merge
    • git pull --rebase(gup):以 rebase 的方式進行合併,而不是 merge

其它有用的命令

  • git tag <name>:建立一個 tag(如:v1.3)
  • git push --tags:將本地 tags 推送到遠端倉庫
  • git push <tag>:推送指定的本地 tag 到遠端

展示幫助資訊
git help -g

回到遠端倉庫的狀態
拋棄本地所有的修改,回到遠端倉庫的狀態。
git fetch --all && git reset --hard origin/master

重設第一個commit
也就是把所有的改動都重新放回工作區,並清空所有的commit,這樣就可以重新提交第一個commit了
git update-ref -d HEAD

展示工作區和暫存區的不同
輸出工作區和暫存區的different(不同)。
git diff

還可以展示本地倉庫中任意兩個commit之間的檔案變動:
git diff <commit-id> <commit-id>

展示暫存區和最近版本的不同
輸出暫存區和本地最近的版本(commit)的different(不同)。
git diff --cached

展示暫存區、工作區和最近版本的不同
輸出工作區、暫存區 和本地最近的版本(commit)的different(不同)。
git diff HEAD

快速切換分支
git checkout -

刪除已經合併到master的分支
git branch --merged master | grep -v `^*|  master` | xargs -n 1 git branch -d

展示本地分支關聯遠端倉庫的情況
git branch -vv

關聯遠端分支
關聯之後,git branch -vv就可以展示關聯的遠端分支名了,同時推送到遠端倉庫直接:git push,不需要指定遠端倉庫了。
git branch -u origin/mybranch

或者在push時加上-u引數
git push origin/mybranch -u

列出所有本地分支
-l引數相當於:local
git branch -l

列出所有遠端分支
-r引數相當於:remote
git branch -r

列出本地和遠端分支
-a引數相當於:all
git branch -a

建立並切換到本地分支
git checkout -b <branch-name>

建立並切換到遠端分支
git checkout -b <branch-name> -t origin/<branch-name>

刪除本地分支
git branch -d <local-branchname>

刪除遠端分支
git push origin --delete <remote-branchname>
或者
git push origin :<remote-branchname>

重新命名本地分支
git branch -m <new-branch-name>
git branch -m <oldbranchname> <newbranchname>:嘗試修改
git branch -M <oldbranchname> <newbranchname>:強制修改

檢視標籤
git tag

展示當前分支的最近的tag
git describe --tags --abbrev=0

本地建立標籤
git tag <version-number>

預設tag是打在最近的一次commit上,如果需要指定commit打tag:
$ git tag -a <version-number> -m "v1.0 釋出(描述)" <commit-id>

推送標籤到遠端倉庫
首先要保證本地建立好了標籤才可以推送標籤到遠端倉庫:
git push origin <local-version-number>

一次性推送所有標籤,同步到遠端倉庫:
git push origin --tags

刪除本地標籤
git tag -d <tag-name>

刪除遠端標籤
刪除遠端標籤需要先刪除本地標籤,再執行下面的命令:
git push origin :refs/tags/<tag-name>

切回到某個標籤
一般上線之前都會打tag,就是為了防止上線後出現問題,方便快速回退到上一版本。下面的命令是回到某一標籤下的狀態:
git checkout -b branch_name tag_name

放棄工作區的修改
git checkout <file-name>

放棄所有修改:
git checkout .

恢復刪除的檔案
git rev-list -n 1 HEAD -- <file_path> #得到 deleting_commit
git checkout <deleting_commit>^ -- <file_path> #回到刪除檔案 deleting_commit 之前的狀態

回到某一個commit的狀態,並重新增添一個commit  //回退,有記錄
git revert <commit-id>

回到某個commit的狀態,並刪除後面的commit
和revert的區別:reset命令會抹去某個commit id之後的所有commit
git reset <commit-id>

修改上一個commit的描述
git commit --amend

檢視commit歷史
git log

檢視某段程式碼是誰寫的
blame的意思為‘責怪’,你懂的。
git blame <file-name>

顯示本地執行過git命令
就像shell的history一樣
git reflog

修改作者名
git commit --amend --author=`Author Name <email@address.com>`

修改遠端倉庫的url
git remote set-url origin <URL>

增加遠端倉庫
git remote add origin <remote-url>

列出所有遠端倉庫
git remote    //  git remote -v

檢視兩個星期內的改動
git whatchanged --since=`2 weeks ago`

把A分支的某一個commit,放到B分支上
這個過程需要cherry-pick命令,參考
git checkout <branch-name> && git cherry-pick <commit-id>

給git命令起別名
簡化命令
git config --global alias.<handle> <command>
比如:git status 改成 git st,這樣可以簡化命令
git config --global alias.st status

儲存當前的修改,但不用提交commit
詳解可以參考廖雪峰老師的git教程

git stash
儲存當前狀態,包括untracked的檔案

untracked檔案:新建的檔案
git stash -u

展示所有stashes
git stash list

回到某個stash的狀態
git stash apply <stash@{n}>

回到最後一個stash的狀態,並刪除這個stash
git stash pop

刪除所有的stash
git stash clear

從stash中拿出某個檔案的修改
git checkout <stash@{n}> -- <file-path>

展示所有tracked的檔案
git ls-files -t

展示所有untracked的檔案
git ls-files --others

展示所有忽略的檔案
git ls-files --others -i --exclude-standard

強制刪除untracked的檔案
可以用來刪除新建的檔案。如果不指定檔案檔名,則清空所有工作的untracked檔案。clean命令,注意兩點:
clean後,刪除的檔案無法找回
不會影響tracked的檔案的改動,只會刪除untracked的檔案git clean <file-name> -f
強制刪除untracked的目錄
可以用來刪除新建的目錄,注意:這個命令也可以用來刪除untracked的檔案。詳情見上一條
git clean <directory-name> -df

展示簡化的commit歷史
git log --pretty=oneline --graph --decorate --all
把某一個分支到匯出成一個檔案
git bundle create <file> <branch-name>
從包中匯入分支
新建一個分支,分支內容就是上面git bundle create命令匯出的內容
git clone repo.bundle <repo-dir> -b <branch-name>
執行rebase之前自動stash
git rebase --autostash
從遠端倉庫根據ID,拉下某一狀態,到本地分支
git fetch origin pull/<id>/head:<branch-name>
詳細展示一行中的修改
git diff --word-diff
清除gitignore檔案中記錄的檔案
git clean -X -f
展示所有alias和configs
注意: config分為:當前目錄(local)和全域性(golbal)的config,預設為當前目錄的config
git config --local --list (當前目錄)
git config --global --list (全域性)
展示忽略的檔案
git status --ignored
commit歷史中顯示Branch1有的,但是Branch2沒有commit
git log Branch1 ^Branch2
在commit log中顯示GPG簽名
git log --show-signature
刪除全域性設定
git config --global --unset <entry-name>
新建並切換到新分支上,同時這個分支沒有任何commit
相當於儲存修改,但是重寫commit歷史
git checkout --orphan <branch-name>
展示任意分支某一檔案的內容
git show <branch-name>:<file-name>
clone下來指定的單一分支
git clone -b <branch-name> --single-branch https://github.com/user/repo.git
忽略某個檔案的改動
關閉 track 指定檔案的改動,也就是 Git 將不會在記錄這個檔案的改動
git update-index --assume-unchanged path/to/file

恢復 track 指定檔案的改動
git update-index --no-assume-unchanged path/to/file

忽略檔案的許可權變化
不再將檔案的許可權變化視作改動
git config core.fileMode false
展示本地所有的分支的commit
最新的放在最上面
git for-each-ref --sort=-committerdate --format=`%(refname:short)` refs/heads/
在commit log中查詢相關內容
通過grep查詢,given-text:所需要查詢的欄位
git log --all --grep=`<given-text>`
把暫存區的指定file放到工作區中
git reset <file-name>

強制推送
git push -f <remote-name> <branch-name>列出所有遠端分支
-r引數相當於:remote
git branch -r

更新到本地
# 源 + 分支名
git pull origin master
複製程式碼

初始化本地git倉庫(建立新倉庫)

git init     

                                             # 初始化 git 專案
git init

安裝好 Git 之後,配置你的資料:
# 配置使用者名稱
git config --global user.name "Your Real Name"
# 配置郵箱地址
git config --global user.email you@email.address
複製程式碼

配置使用者名稱

git config --global user.name "xxx"                       複製程式碼

配置郵件

git config --global user.email "xxx@xxx.com"              複製程式碼

git status等命令自動著色

git config --global color.ui true                         git config --global color.status autogit config --global color.diff autogit config --global color.branch autogit config --global color.interactive auto複製程式碼

clone遠端倉庫

git clone git+ssh://git@192.168.53.168/VT.git             複製程式碼

檢視當前版本狀態(是否修改)

git status                                                複製程式碼

新增xyz檔案至index

git add xyz                                               複製程式碼

增加當前子目錄下所有更改過的檔案至index

git add .                                                 複製程式碼

提交

git commit -m `xxx`                                       複製程式碼

合併上一次提交(用於反覆修改)

git commit --amend -m `xxx`                               複製程式碼

將add和commit合為一步

git commit -am `xxx`                                      複製程式碼

刪除index中的檔案

git rm xxx                                                複製程式碼

遞迴刪除

git rm -r *                                               複製程式碼

顯示提交日誌

git log                                                   複製程式碼

顯示1行日誌 -n為n行

git log -1                                                git log -5複製程式碼

顯示提交日誌及相關變動檔案

git log --stat                                            git log -p -m複製程式碼

顯示某個提交的詳細內容

git show dfb02e6e4f2f7b573337763e5c0013802e392818         複製程式碼

可只用commitid的前幾位

git show dfb02                                            複製程式碼

顯示HEAD提交日誌

git show HEAD                                             複製程式碼

顯示HEAD的父(上一個版本)的提交日誌 ^^為上兩個版本 ^5為上5個版本

git show HEAD^                                            複製程式碼

顯示已存在的tag

git tag                                                   複製程式碼

增加v2.0的tag

git tag -a v2.0 -m `xxx`                                  複製程式碼

顯示v2.0的日誌及詳細內容

git show v2.0                                             複製程式碼

顯示v2.0的日誌

git log v2.0                                              複製程式碼

顯示所有未新增至index的變更

git diff                                                  複製程式碼

顯示所有已新增index但還未commit的變更

git diff --cached                                         複製程式碼

比較與上一個版本的差異

git diff HEAD^                                            複製程式碼

比較與HEAD版本lib目錄的差異

git diff HEAD -- ./lib                                    複製程式碼

比較遠端分支master上有本地分支master上沒有的

git diff origin/master..master                            複製程式碼

只顯示差異的檔案,不顯示具體內容

git diff origin/master..master --stat                     複製程式碼

增加遠端定義(用於push/pull/fetch)

git remote add origin git+ssh://git@192.168.53.168/VT.git 複製程式碼

顯示本地分支

git branch                                                複製程式碼

顯示包含提交50089的分支

git branch --contains 50089                               複製程式碼

顯示所有分支

git branch -a                                             複製程式碼

顯示所有原創分支

git branch -r                                             複製程式碼

顯示所有已合併到當前分支的分支

git branch --merged                                       複製程式碼

顯示所有未合併到當前分支的分支

git branch --no-merged                                    複製程式碼

本地分支改名

git branch -m master master_copy                          複製程式碼

從當前分支建立新分支master_copy並檢出

git checkout -b master_copy                               複製程式碼

上面的完整版

git checkout -b master master_copy                        複製程式碼

檢出已存在的features/performance分支

git checkout features/performance                         複製程式碼

檢出遠端分支hotfixes/BJVEP933並建立本地跟蹤分支

git checkout --track hotfixes/BJVEP933                    複製程式碼

檢出版本v2.0

git checkout v2.0                                         複製程式碼

從遠端分支develop建立新本地分支devel並檢出

git checkout -b devel origin/develop                      複製程式碼

檢出head版本的README檔案(可用於修改錯誤回退)

git checkout -- README                                    複製程式碼

合併遠端master分支至當前分支

git merge origin/master                                   複製程式碼

合併提交ff44785404a8e的修改

git cherry-pick ff44785404a8e                             複製程式碼

將當前分支push到遠端master分支

git push origin master                                    複製程式碼

刪除遠端倉庫的hotfixes/BJVEP933分支

git push origin :hotfixes/BJVEP933                        複製程式碼

把所有tag推送到遠端倉庫

git push --tags                                           複製程式碼

獲取所有遠端分支(不更新本地分支,另需merge)

git fetch                                                 複製程式碼

獲取所有原創分支並清除伺服器上已刪掉的分支

git fetch --prune                                         複製程式碼

獲取遠端分支master並merge到當前分支

git pull origin master                                    複製程式碼

重新命名檔案README為README2

git mv README README2                                     複製程式碼

將當前版本重置為HEAD(通常用於merge失敗回退)

git reset --hard HEAD                                     git rebase複製程式碼

刪除分支hotfixes/BJVEP933(本分支修改已合併到其他分支)

git branch -d hotfixes/BJVEP933                           複製程式碼

強制刪除分支hotfixes/BJVEP933

git branch -D hotfixes/BJVEP933                           複製程式碼

列出git index包含的檔案

git ls-files                                              複製程式碼

圖示當前分支歷史

git show-branch                                           複製程式碼

圖示所有分支歷史

git show-branch --all                                     複製程式碼

顯示提交歷史對應的檔案修改

git whatchanged                                           複製程式碼

撤銷提交dfb02e6e4f2f7b573337763e5c0013802e392818

git revert dfb02e6e4f2f7b573337763e5c0013802e392818       複製程式碼

內部命令:顯示某個git物件

git ls-tree HEAD                                          複製程式碼

內部命令:顯示某個ref對於的SHA1 HASH

git rev-parse v2.0                                        複製程式碼

顯示所有提交,包括孤立節點

git reflog                                                git show HEAD@{5}複製程式碼

顯示master分支昨天的狀態

git show master@{yesterday}                               複製程式碼

圖示提交日誌

git log --pretty=format:`%h %s` --graph                   git show HEAD~3git show -s --pretty=raw 2be7fcb476複製程式碼

暫存當前修改,將所有至為HEAD狀態

git stash                                                 複製程式碼

檢視所有暫存

git stash list                                            複製程式碼

參考第一次暫存

git stash show -p stash@{0}                               複製程式碼

應用第一次暫存

git stash apply stash@{0}                                 複製程式碼

檔案中搜尋文字“delete from”

git grep "delete from"                                    git grep -e `#define` --and -e SORT_DIRENTgit gcgit fsck複製程式碼

相關文章