2016-09-25 72 views
1

我想重置爲特定提交。我使用命令git reset --hard Head~5這已重置我的本地。我做了一些改變,現在我想推動。但我得到Updates were rejected because the tip of your current branch is behind。我不想拉,否則我回到最近的提交。我該如何重置?恢復到特定提交但不能推送

回答

3

您可以強行推送,但這可能存在問題。

有沒有其他人在這個回購工作,或者它只是你嗎?你是否確定要刪除這些遙控器的提交?

git push -f origin branch-name將更新遠程分支以匹配您剛纔所做的更改。

但是這樣做時你需要小心。如果你有同事在同一個分支工作,你應該告訴他們,以防他們已經進入這些變化。另外他們可能推動了其他你會被壓倒的改變。

+0

只要我在這個分支上工作。這是主開發部門的一個小分支。 – KexAri

+0

在這種情況下,它將是安全的強制推 – bcmcfc

+0

我是正確的'重置'和強制推抹消除提交歷史,但恢復保持它? – KexAri

3

你需要做一個git push --force(並不總是可取的,請閱讀下面)。

如果您無權執行推動操作,那麼這意味着您無法重置提交,而是嘗試使用reverting這些提交。

請注意,如果分支是主開發分支,或者它已經被其他開發者拉動,那麼重置提交併推送它們(不管權限問題)是一件危險的事情,並且git revert將是更好的選擇。

這是混帳復歸相當於你的榜樣的(git reset --hard HEAD~5):

git revert Head~5..HEAD 

這將恢復提交內容HEAD~4HEAD~3,...,和HEAD表示。它會保留你現有的提交,然後再增加額外的恢復提交。每次提交將會有1次恢復提交回復,在您的情況下最多會添加5次提交提交。

如果您希望自己管理的提交(例如,恢復他們都在1犯下的,而不是5)使用-n選項,這樣它會恢復在當地分行的變化而不提交它們:

git revert -n Head~5..HEAD 

然後,您將決定在本地分支中提交未完成的更改。

git reset當您重置尚未推送的本地提交時是安全的。如果您擁有推力許可,並且您確信沒有其他人已提交您將要重置的提交,則可以在本地重置它們,然後執行推動操作。

當涉及到已提交的提交時,git revertgit reset更安全,因爲您沒有更改歷史記錄,也沒有刪除已由其他團隊成員提交和依賴的提交。請注意,如果事情在恢復過程中失控(例如,您遇到不確定如何解決的衝突),則您始終可以通過git revert --abort中止操作。欲瞭解更多信息,請參閱git revert documentation page

+0

我將如何恢復? – KexAri

+0

@KexAri更新了答案 –