簡體   English   中英

git rebase后缺少​​git push中的+參數

[英]Missing the + parameter in git push after git rebase

我想在推送完成后將提交壓縮到git中。 因此,我發現了一個問題: 如何在推送后將其壓縮到git中?

我按照公認的回答說:

git rebase -i origin/master~4 master

但是我忘記了在將其推到github時在主節點之前添加+參數。 這意味着我使用git push origin master而不是git push origin +master

我想知道這有多重要,以及如何撤消它,所以我可以使用正確的命令。

------------------- 編輯1 ----------------------------

我使用emacs magit作為我的git客戶端,因此具體地說,我使用magit-push-other origin master

Magit的日志在下面,紅色矩形圈出了我要壓縮的兩個提交。 在我壓扁了兩個提交之后,magit告訴我有一個未推送的提交和兩個未從上游合並的提交。 然后,我使用magit-pull-from-upstreammagit-push-other origin master完成這些更改。 然后提交日志就是圖片繪制的內容。

magit日志

如果git push origin master在這種情況下不起作用,似乎更像是一個magit問題。

正如@rkta所指出的,這個問題是在您擠壓后進行拉動時產生的:您會注意到,您的Git日志現在具有三個提交來編輯語法錯誤:原始的兩個加上已壓縮的一次,合並到c6f979b 該合並提交是由git pull創建的。

此時,我建議您不要嘗試解決此問題,因為您的協作者可能已經獲取了您的更改,如果您再次嘗試修復此歷史記錄,他們將不得不做一些工作來修復其沙箱。 總的來說,從您提交承諾的那一刻起,我想說即使您不喜歡它也應該保留歷史-強制推送只會為他人帶來更多工作。

話雖如此,這是您仍然可以修復它的方式,以及首先如何修復它的方法:

git pull
git rebase -i a8ba675
# mark the grammatical error commits to be squashed -
# this will still work even though you already merged
git fetch
# use git log --all to make sure no one committed anything since the pull above
git push origin +master
# pray no one comes to yell at you

如果忘記了+參數怎么辦

+表示強制推動。 如果您在需要時忘記了它,則會收到錯誤消息。 解決的方法是再次使用+

但是在使用類似技術之前,您應該真正了解有關在git中重寫歷史記錄的更多信息。

經驗法則:不要在推送后重寫歷史記錄-這意味着您可能永遠不需要強制推送。


為什么沒有收到錯誤,為什么結果沒有達到預期?

問題是,您在壁球之后做了拉力。

為什么git會顯示從上游推送了一個提交而沒有合並兩個提交呢?

您創建了兩個提交A和B,並將它們推到原始位置。 現在,當您在本地壓縮這些提交時,它們都將被刪除,並被新的提交C代替。

然后git在原始記錄中看到兩個不在源中的提交(A和B)-當然,您只是刪除了它們。 如果執行git pull ,則剛剛刪除的提交和新創建的提交將合並在一起。

解決方案1:

一旦推送歷史,請勿重寫歷史!

解決方案2:

擠壓提交后不要拉,只需強行推動即可。 真的不要對共享分支執行此操作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM