簡體   English   中英

我如何重新推送先前的提交?

[英]how do I re push a prior commit?

我目前的情況是,我的一些最新提交覆蓋了舊提交的內容。

我正在使用工具 git 擴展,從 GUI 界面,我可以檢出某個修訂版 - 提交。

所以我檢查了修訂版,並且可以在本地看到文件存在 - 但似乎沒有任何提交? 我猜哪個有意義?

如何重新推送先前的提交?

假設我們有一個場景,我們之前的提交日志就像

git status
commit-1 [ bad commit ]
commit-2 [ bad commit ]
commit-3 [ bad commit ]
commit-4 [ good commit ]
commit-5 [ good commit ]

現在我們可能想要兩件事。

第一個案例

我們可能想要刪除所有錯誤的 git 提交,並希望進入最后一個好的提交階段。 說喜歡以下

git status
commit-4 [ good commit ]
commit-5 [ good commit ]

我們可以通過休息前三個提交來做到這一點

git reset --hard HEAD~3 
# for n number of last commit reset 
git reset --hard HEAD~n

我必須提到這是撤消您的工作非常困難的方法。 當您完全確定您喜歡這樣做的原因時,請這樣做。

第二種情況

你可能想把你的 commit-4 放在那些的頂部

git status
commit-4 [ good commit ]
commit-1 [ bad commit ]
commit-2 [ bad commit ]
commit-3 [ bad commit ]
commit-4 [ good commit ]
commit-5 [ good commit ]

你可以像下面這樣做

git cherry-pick -n <commit-4 sha1>

這些將把 commit-4 放在那些糟糕的提交之上。

你有沒有嘗試在頂部挑選提交? git 櫻桃挑選

我建議兩種方式之一。

恢復

如果你的新提交沒有貢獻任何有用的東西。 它只是取消了您在早期提交中所做的使用 git-revert。 它將創建一個新提交,該提交取消已恢復提交所做的任何操作。

在 git 命令行中,您可以使用

git log

保留其 ID(例如 12345abcd)。 然后恢復那個提交

git revert 12345abcd

櫻桃采摘

如果你的新提交除了打破舊提交之外還做了一些好事,你可以挑選你喜歡的舊提交。 它將應用與上一次提交相同的代碼更改。 但是,它將成為新的提交。 這使您的分支與舊的拉動保持一致。

首先用git log確定你想再次申請的提交並保留 ID(例如 fedc9876)

git cherry-pick fedc9876

如果您喜歡更多地控制櫻桃選擇,請使用 -n 標志來防止立即提交

git cherry-pick -n fedc9876

您提到您使用 git 工具。 git 命令可能會幫助您找到如何為此目的使用它。

所以我最終創建了一個新分支並將我的文件移到那里,后來我遇到了一個類似的問題,我注意到本地分支和遠程分支的命名方式不一樣。

我執行了 git push -f,因為我想使用我們的 master 進行 rebase,但是本地分支名稱與遠程分支名稱不同,這意味着創建了一個遠程分支並且該分支包含新的提交。

似乎 gitExtension 默認創建帶有大寫起始字母的本地分支 - 當我創建遠程分支時並非總是如此。

暫無
暫無

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

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