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