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 這是網上找的一種方式,但是還是失敗了

 

正確的步驟如下

(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 了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM