git使用
git rebase
rebase是一個(gè)非常強(qiáng)大的指令,可以對(duì)你的提交做各種修改。先體驗(yàn)一下我覺得最厲害的的,比如在某一次提交之后,我又提交了好幾次,但是我發(fā)現(xiàn)我這次提交有問題,想要修改,怎么辦了?也就是去修改幾次前的提交內(nèi)容,rebase 可以幫你實(shí)現(xiàn)。
1.修改中間某一次提交的內(nèi)容:
比如我現(xiàn)在分支上面有兩次提交,內(nèi)容是兩個(gè)txt文件。
現(xiàn)在我再創(chuàng)建一個(gè)文件aa.txt,進(jìn)行第三次交。結(jié)果狀態(tài)如下。
我再創(chuàng)建一個(gè)文件bb.txt,進(jìn)行第四次提交,結(jié)果如下:
這時(shí)候我覺得我第三次提交的aa.txt是有問題的,我需要?jiǎng)h除(這里為了演示方便,如果純粹只是刪除在當(dāng)前直接刪除就可以了),我們用rebase可修改第三次commit。
因?yàn)槭堑箶?shù)第二次,就用 git rebase -i HEAD~2
-i是交互的意思。
我們就進(jìn)入到這個(gè)界面,我們可以在里面編輯。
仔細(xì)看一下下面的注釋,為什么rebase可以對(duì)提交進(jìn)行各種操作,就是這個(gè)命令實(shí)現(xiàn)的。pick就是使用這次提交,我們進(jìn)入界面默認(rèn)就是pick,因?yàn)檫@幾個(gè)提交我們都在使用。reword是重新編輯提交的message,有點(diǎn)像git commit --amend。edit是重新編輯這次提交,即可以改內(nèi)容。squash是把這一次提交與上一次提交合并,注意順序是合并的上一次上面去,比如third合并到second,fixup是合并后把message都不要了,drop是丟掉這次提交。
故我們要修改third提交,就編輯如下:
:wq 保存出來,
這個(gè)提示是說你可以使用git commit --amend來修改提交,如果你修改ok了就執(zhí)行g(shù)it rebase --continue
我們看我們的狀態(tài),
第四次提交已經(jīng)沒有了,我們又回到第三次的狀態(tài),很像reset到第三次。
我們刪除aa.txt
注意需要再一次提交,最后運(yùn)行g(shù)it rebase --continue,再看我們的狀態(tài)
我們又回到第四次提交,但是aa.txt已經(jīng)不在了,中間多出了一次提交remove aa.txt.
是不是很方便,如果是直接reset到第三次,第四次就沒有了,而這樣的做法既刪除了aa.txt,第四次的提交也不用修改。
2.合并多次提交
其實(shí)third remove aa.txt這兩次提交是無用的,我們?cè)趯?shí)際編程中經(jīng)常會(huì)遇到這種多次提交,太多了影響感官。我們想合并最后幾次提交,直接成為third提交。
git rebase -i HEAD~3
當(dāng)然如果確認(rèn)third remove aa.txt無用,直接使用d刪除即可,這次我們還是合并。注意是當(dāng)前的合并到前面的,故
保存退出后出現(xiàn)界面
如果你想修改commit的message就要寫入,帶#就會(huì)被忽略。我們這里默認(rèn)使用了third
再看狀態(tài)
合并成一次提交了,內(nèi)容是第四次提交的內(nèi)容。
交換兩次提交的順序
只需要把pick的順序換一下就可以了。
記住你想操作幾次提交就用git rebase -i HEAD~n
版本回退問題
版本回退我們也是經(jīng)常遇到的,大家都知道用git reset ,但實(shí)際它后面是帶有三種參數(shù),–soft --mixed --hard
這個(gè)圖很好的說明了三個(gè)參數(shù),比如reset某次commit ,soft是回退到git add的狀態(tài),mixed是回退到工作區(qū)狀態(tài),hard是直接抹掉。
比如我發(fā)現(xiàn)了我這次的提交有問題,想返回來修改,則使用mixed,這些修改就還在工作區(qū),我在這次修改上面繼續(xù)修改即可。說白了就是撤回這次提交。
如果我根本不想要這次修改,就直接用hard。這種一般是為了版本回退,比如git reset --hard commit_id .我覺得我這個(gè)用的還挺多的。注意問題是我們?cè)趺丛倩氐阶钚碌腸ommit_id
使用git reflog找到最新的commit_id 就可以使用git reset --hard回到最新的。
這里一定要注意,最好reset hard之前記住最新的id,如果你找不到了,你的代碼就沒有了
總結(jié)
- 上一篇: 基于javascripts的语法特性使用
- 下一篇: 王者荣耀在该服务器上未获取角色信息,王者