git命令總結

幸福璐發表於2018-08-26

git合併分支命令

1、git status (檢視當前程式碼狀態,還有個git stash)
2、git pull (拉取遠端程式碼,使原生程式碼保持最新,git pull –rebase)
3、git branch -a (檢視當前所在分支,以及該工程下的所有分支,如果標有remotes/origin/HEAD,則表明該分支是最新分支。)
clipboard.png

4、git merge origin/master(其他分支,把你選擇的分支合併到本地當前分支上。)
5、git diff (檢視衝突資訊)
6、git status (看下那些檔案需要手動調整,解決衝突)
7、git add ./(要提交檔案,將本地改動的檔案提交到暫存區中)
8、git commit -m `合併XXX分支程式碼` (提交程式碼,並新增相應的資訊,將暫存區裡的改動提交到本地版本庫中)
9、git push (把合併好的程式碼推送到遠端)


git版本回退

(1)提交到遠端分支,各種回退方法

1、將本地改動的程式碼撤銷。(此時程式碼還沒有進入快取區,本地版本庫)
git checkout .
2、將已經存放於暫存區的檔案撤銷回來(即執行過git add的檔案)
方法:
git reset HEAD . (撤銷所有檔案)
git reset HEAD -filename (撤銷指定檔案)
3、將提交到本地版本庫的檔案撤銷回來(即執行命令 git commit的檔案)
方法:
{1}僅回退commit資訊,將修改的程式碼保留下。
git reset –soft head
{2}徹底回退到上次commit版本,不保留修改程式碼。
git reset –hard head^
注意:
HEAD :代表當前版本
HEAD^ :代表上一個版本
–hard 會拋棄當前工作區的修改
–soft 會回退到之前的版本,但是保留當前工作區的修改,可以重新提交

(2)提交到遠端分支,各種回退方法

【1】當前的遠端分支只有自己用的情況下。
1、git reflog (檢視所有分支的所有操作記錄(包括commit和reset的操作),
包括已經被刪除的commit記錄,git log則不能察看已經刪除了的commit記錄)

clipboard.png

2、git reset –hard/soft 版本號
3、git push -f
【2】遠端分支是公共分支,即該分支有多人在開發,如分支(master)。
例子:A1-A2-B1
(A、B兩個人都往公共分支上提交程式碼,如果A2提交錯誤,想回退到A1.這需要兩人配合)
(1)A同學使用reset回退到了A1版本。並告知B同學,他的程式碼回退的A1版本了。
B同學的做法:
需要找出A同學回退版本後覆蓋掉B1的提交內容。
1、git checkout B_branch(回到自己的開發分支)
2、git reflog (檢視當前的commit Id)
3、git reset –hard B1 (回到被覆蓋的提交)
4、git checkout -b newB1_backup (拉個新分支,為了儲存由於回退版本被覆蓋掉的B1)
5、git checkout B_branch(拉完分支,回到B當前自己的開發分支)
6、git reset –hard 0bbbbbb (回到自己分支的最前端)
以上六步驟,將B1的那次提交找了回來。
7、git reset 分支(此時B需要自己本地的分支,與遠端的公共分支保持一致,執行這個步驟後,B的本地才是你回滾後的程式碼,也就是現在B的本地分支也只有A1這版提交的程式碼)
8、git checkout master (回到公共分支)
9、git merge newB1——backup (執行後,B的本地,和公共分支上才是A1-B1,A2被成功清除。)
以上reset方法,需要隊友的配合,這不是一個很好的回退方法。因為這個方法回退到公共遠端分支版本後,需要隊友手動的用遠端master分支覆蓋本地分支。
(2)另一個方法是用revert。
git revert 命令意思是撤銷某次提交。它會產生一個新的提交,雖然程式碼回退了,但是版本依然是向前的,所以,當你用revert回退之後,所有人pull之後,他們的程式碼也自動的回退了。
git revert HEAD //撤銷最近一次提交
git revert HEAD~1 //撤銷上上次的提交,注意:數字從0開始
git revert 0ffaacc //撤銷0ffaacc這次提交
(1)revert 是撤銷一次提交,所以後面的commit id是你需要回滾到的版本的前一次提交
(2)使用revert HEAD是撤銷最近的一次提交,如果你最近一次提交是用revert命令產生的,那麼你再執行一次,就相當於撤銷了上次的撤銷操作,換句話說,你連續執行兩次revert HEAD命令,就跟沒執行是一樣的
(3)使用revert HEAD~1 表示撤銷最近2次提交,這個數字是從0開始的,如果你之前撤銷過產生了commi id,那麼也會計算在內的。
(4)如果使用 revert 撤銷的不是最近一次提交,那麼一定會有程式碼衝突,需要你合併程式碼,合併程式碼只需要把當前的程式碼全部去掉,保留之前版本的程式碼就可以了.


rebase

平時基本只用git pull,git commit 和git push,幾乎沒有用git rebase來變基,減少難看的merge 型別的commit。
git stash(把未提交的修改都儲存起來)
git pull —rebase
git stash pop(會將當前分支的最後一次快取的內容釋放出來)
git add -u
git rebase —continue( 如果此時提示No rebase in progress?則表示已經沒有衝突了;否則上面兩步要重複多次)
git commit -m “xxx”
git push origin [branch] -f

(待.....)