GIT常用命令總結

GIt各種版本回退命令

1、git文件已修改但還沒有提交到暫存區時,可以使用git checkout -- <file> 來放棄工作目錄文件的修改

 

注意:

一旦放棄修改,文件會恢復到上一個暫存狀態,即git add之後所做的所有修改都沒有了;

只有修改還沒有git add提交到暫存區時可以使用git checkout -- <file> ;

-- 很重要,如果沒有的話就是分支切換的命令了;

未跟蹤的文件不能使用此命令放棄修改;

 

2、git文件已git add提交暫存區,可以使用git reset HEAD <file>命令退出暫存區

對於某文件xxx 的修改已經提交到暫存區後 ,git diff --cached可以查看到變更,執行git reset HEAD xxx  後,xxx wenjian 狀態變爲已修改未入暫存區,需要再執行git checkout -- xxx 才能將修改從文件中刪除。

 

3、git文件已git commit提交本地數據庫,可以執行git reset --hard commitID回退版本

git reset --hard HEAD^ 回退當前分支到上一版本。用HEAD表示當前版本,也就是最新的提交

上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上100個版本寫成HEAD~100。

git reset --hard xxxxxxx ,xxxxxxx  是歷史提交commitid的前幾位。只要知道提交的版本號,就可以切換到任何一個提交點上(本地還沒有推送到遠程倉庫的提交回退後,如沒有記錄commitID就無法再回退回來)

 

注意:

修改被git add提交到暫存區、git commit提交到版本庫後都可以使用git reset回退版本

git reset回退的只是本地庫的版本,不能影響到遠程倉庫。使用git pull更新後還可以更新到遠程庫最新版本。

     

4、git文件已提交本地數據庫或推送到遠程倉庫,可以執行git revert回退版本

git revert 撤銷某次操作,某次操作之前和之後的commit和history都會保留,並且把這次撤銷作爲一次最新的提交

   git revert HEAD                撤銷前一次 commit

   git revert HEAD^               撤銷前前一次 commit

   git revert commitID

 git revert是提交一個新的版本,將需要revert的版本的內容再反向修改回去,版本會遞增,不影響之前提交的內容

注意:撤銷指定的版本,撤銷也會作爲一次提交進行保存。revert之後可以直接git push

 

5、有依賴關係的操作撤銷時會被拒絕,併產生衝突,需要解決衝突後才能撤銷或取消撤銷

 

解決辦法一:根據git status提示回退衝突後取消該次撤銷操作

 

解決辦法二:手動解決衝突完成該次撤銷

 

git 分支與git tag的常用命令

git分支

git 中的分支,其實本質上僅僅是個指向 commit 對象的可變指針。Git 會使用 master 作爲分支的默認名字。HEAD是指向正在工作中的本地分支的指針。

git創建、刪除分支很容易,因此鼓勵開發者頻繁使用分支。

git branch        查看本地所有分支
git branch -r     查看遠端所有分支
git branch -a    查看本地及遠端所有分支


$ git branch -a
master
* master-origin
remotes/origin/Branch_master
remotes/origin/Branch_master1
remotes/origin/HEAD -> origin/master
remotes/origin/master
*標示本地當前分支

git branch ‘newbranch’                    本地創建新分支
git branch <branch> <commitID>     以某個commit提交創建新分支
注意:拉分支前要將修改合入,否則會將修改也帶到新拉的分支上
git push remote-name ‘分支名’       本地分支推送到遠程倉庫

刪除分支前,需要先切換到另外一個分支上
git branch -d ‘要刪除的本地分支名’    刪除本地分支
git push [遠程名] :[分支名]                 刪除遠程分支
git checkout ‘分支名稱’                      切換當前分支
git checkout -b ‘新分支名稱’              本地創建並切換到新分支
git checkout -t  ‘分支名稱’                  與遠程分支建立跟蹤,之後可以直接更新、推送代碼

從遠程分支檢出的本地分支,稱爲跟蹤分支(tracking branch)。跟蹤分支是一種和遠程分支有直接聯繫的本地分支。在跟蹤分支裏輸入 git push,Git 會自行推斷應該向哪個服務器的哪個分支推送數據。

反過來,在這些分支裏運行git pull 會獲取所有遠程索引,並把它們的數據都合併到本地分支中來。

在克隆倉庫時,Git 通常會自動創建一個 master 分支來跟蹤 origin/master。這正是 git push 和 git pull一開始就能正常工作的原因。

 

當然,你可以隨心所欲地設定爲其它跟蹤分支,比如 origin 上除了 master 之外的其它分支。 
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"


或者使用checkout -b [分支名] [遠程名]/[分支名],創建一個本地分支並自動關聯到遠程分支.
$ git checkout -b sf origin/serverfix

Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"
現在你的本地分支 sf 會自動向 origin/serverfix 推送和抓取數據了。

或者使用checkout -t [遠程名]/[分支名],本地自動創建一個與遠程分支名字相同的分支並與之對應追蹤關係.

$ git checkout -t  origin/serverfix

 

git標籤

git tag <name>                                        在當前分支最新版本打name命名的輕量級標籤
git tag                                                      查看所有標籤。標籤不是按時間順序列出,而是按字母排序的
git tag <name> commitID                         在當前分支commitID版本打name命名的標籤
git show <tagname>                                 查看標籤信息
git tag -a <name> -m “標籤說明信息”       打帶有附註說明的標籤
git push origin <tagname>                        推送本地標籤到遠端
git push origin --tags                                  一次性推送全部尚未推送到遠程的本地標籤
git tag -d <tagname>                                刪除本地標籤
git push origin :refs/tags/ <tagname>        刪除遠程標籤
git push origin --delete tag <tagname>      刪除遠程標籤

注意:
打標籤前需要先切換到需要打標籤的分支
指向Git標籤的指針不能移動,所以git的標籤不能提交修改

 

git時遇到的一些問題總結:

 

1、出現remote reject,

嘗試

git pull --rebase

再次push

原因分析:可能是與remote庫提交記錄不一致;

 

2、提交後,評審不通過或者CI不通過,

修改後使用

git commit --amend

並再次push

原因分析:change-id需要變更;

 

3.別人提交了代碼,與本地有衝突

   需要先git stash將修改的暫時保存一下, 

   然後 git pull --rebase 

   然後git stash pop 再通過該命令將暫存的彈出來 

   如果之前有修改未通過,需要git commit --amend 再次commit一下

   最後 git push origin HEAD:refs/for/master%[email protected] 提交review

 

4、提交了不想提交的東西,還沒有push,撤銷commit

 1) git reset HEAD~  這一步不會讓你的工作區(你磁盤上文件的狀態)發生改變,但是會撤銷上次的commit,並且將你第一步commit的那些改動從暫存區移除(所以當你再次使用git status查看狀態的時候,它們會出現在‘Changes not staged for commit’這句話的下面。提交他們之前,你需要再把它們add一次)

###修改文件

 2)git add .

3)git commit -m "0110-KW"

4)git push origin HEAD:refs/for/master%[email protected] 

 

5、git merge 之後push被拒絕

  [remote rejected] HEAD -> refs/for/master%[email protected] (you are not allowed to upload merges)

    git pull --rebase後再提交

 

6、查看到未傳送到遠程代碼庫的提交詳情

git log master ^origin/master   ^origin/master  可改成其它分支

 

7、更新本地分支

      1) git checkout local_branch

      2) git rebase master   ---此處應當是跟本地的主分支rebase

      3) 如果這中間出現了conflict,手工解決後,用 git add xxx.file 來更新衝突文件的索引

      4) git rebase --continue 繼續合併

      5)在git rebase的過程中,可以通過--abort參數終止rebase,並回到rebase開始前的狀態

     對於那些長時間不往主分支push的分支,建議儘量及時rebase上游分支,有衝突提前就fix掉,這樣即使這個分支開發了很長時間,提交時也不會太麻煩

 

8、git stash的使用

      在開發過程中,大家都遇到過bug,並且有些bug是需要緊急修復的。當開發人員遇到這樣的問題時,首先想到的是我新切一個分支,把它修復了,再合併到master上。當時問題來了,你當前正在開發的分支上面,還有未提交的代碼,你又不想把代碼提交了,怎麼辦呢?git提供了stash功能,把當前工作目錄現場給存儲起來,等修復完bug,再切回來。

當前分支上, git stash先把修改的內容暫存;

master上新建分支new_branch,開發緊急任務

git add . / git commit -m "xxxx"  / push

切回master分支,git merge new_branch把修改的緊急任務合併到master

git stash list查看暫存內容

git stash pop (或者git stash apply stash@{1})恢復暫存的內容,git stash drop stash@{1}來刪除某個stash

 

git stash pop出現以下錯誤:

Auto-merging anyservice-iecs/src/com/zte/anyservice/iecs/ros/virtual/zxve/virtualmachine/vmtemplate/action/ZxveTemplateAction.java

CONFLICT (content): Merge conflict in anyservice-iecs/src/com/zte/anyservice/iecs/ros/virtual/zxve/virtualmachine/vmtemplate/action/ZxveTemplateAction.java

很簡單,跟pull 或者 rebase出現衝突一樣,手工合併文件並用git add xxx.file來更新衝突文件的索引。需要注意的是,衝突解決之後,Git並不會刪除之前的stash記錄,可以使用git stash drop將沒用的記錄刪除掉。

 

9、 git commit歷史中有問題

通過如下流程解決:

    1)git log查看commit歷史

    2)git rebase -i HEAD~2 表示要修改當前版本的倒數第二次狀態

這個命令出來之後,會出來三行東東:

         pick:*******

         pick:*******

         pick:*******

         如果你要修改哪個,就把那行的pick改成edit,然後退出。

 

         這時通過git log你可以發現,git的最後一次提交已經變成你選的那個了,這時再使用:

       3) git commit --amend

 

10、查看當前未push的commit詳情

git status 只能查看未傳送提交的次數

git cherry -v只能查看未傳送提交的描述/說明

git log master ^origin/master則可以查看未傳送提交的詳細信息

 

 

發佈了11 篇原創文章 · 獲贊 11 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章