git push某一次的commit記錄

背景:

我們會遇到這樣的情況,在develop分支上,第一天修改的文件,已經執行了git commit 添加了提交記錄信息commit1,忘記push了,然後第二天,執行了git pull,拉取了服務器的一大堆提交下來,比如有commit2,commit3,commit4之類的,第一天的提交commit1已經被衝到前面去了,但是現在我本地也有一些其他改動,我又想提交之前的commit1,只提交這個,我要怎麼辦呢?

注意,此時本地的提交已經變成下面這樣了:

merge_new
commit4
commit3
commit2
commit1
commit0

其中的“merge_new”是你執行git pull時,拉取下來的服務器代碼和本地代碼的一個合併記錄,如果你想直接push的話,這條記錄也會跟着推上去,所以平時都建議大家,修改代碼之前先pull拉取服務器的新代碼下來,然後開始修改,提交之前就不要在拉取新代碼了,就是爲了防止這條記錄的產生。

  此時,如果我只提交commit1呢,我要怎麼提交?

錯誤嘗試:

(1)git diff commit0 commit1 > test.patch ,然後再新的倉庫路徑下git apply test.patch(開發小哥哥直接說patch裏沒有他的提交,不科學啊)

(2)git show commit1 > test.patch , 然後再新的倉庫路徑下git apply test.patch,顯然,這不是patch的正確生成方式,打patch毫無疑問的失敗了

(3)git push commit1:develop 這是網上找的一種方式,但是還是失敗了

(4)git push <remote name> <commit hash>:<remote branch name> 感覺靠譜,不知道是不是commit順序不對還是失敗了,附上方法:http://blog.dennisrobinson.name/push-only-one-commit-with-git/ ,如果有成功的可以分享下

 

正確的步驟如下:

(1) 基於工作分支develop(根據自己的時間情況修改下)的最新節點創建並切換到新的分支test:git checkout -b test  remotes/origin/develop,操作執行後,本地會新建一個test分支,並且切換到test分支,git branch 可以看到當前所在的分支

(2) (此時已經在test分支上了)cherriy-pick commit1到test分支上:git cherry-pick commit1

(3) git log 我們可以看到commit1 已經在test分支上了, 並且是最後一個提交

(4)現在直接push到工作分支develop就可以了:我們用的是gerrit做代碼審覈的,所以,我們的命令是git push origin HEAD:refs/for/develop,如果你沒有gerrit審覈,直接git push 就ok 了

原文鏈接:https://www.cnblogs.com/zndxall/p/9505446.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章