2011-04-11 178 views
14

我搞砸了我的git回購一點。我在一個單獨的分支中開發了一個功能。完成工作後,我轉向主人合併,但我的合作伙伴推送了一些與我發生衝突的文件。合併後,衝突和推動新的變化,我看到我也犯了我的伴侶的舊變化。撤銷上次提交/合併

現在我想重做這個提交/合併。我試過 git reset --soft HEAD^但是當我想推,我得到了這個錯誤信息Merge the remote changes before pushing again

任何人都可以幫助我嗎?

+0

http://stackoverflow.com/questions/1377845/git-reset-hard-and-a-remote-repository – plaes 2011-04-11 16:04:34

回答

5

呵呵,你幾乎想通了:

git reset --hard HEAD^ 
+1

嘿plaes感謝您的回答,但我想保持我推錯的文件。有沒有解決方案? – 2011-04-11 15:08:31

+0

'git reset --soft'可以幫到你。 – LaraChicharo 2015-10-13 19:51:40

27

您的特性分支仍將指向你的工作。你不會失去這些改變。

正如plaes說,你可以重置主回一個與

git reset --hard HEAD^ 

如果你想抓住從你的分支一些特定的文件,而合併,就可以檢查出來:

git checkout yourbranch -- file1 file2 etc 

如果你想從合併之前的主人的一些文件,你也可以檢查這些:

git checkout master^ -- file3 file4 etc 

這並不理想,但它有時是需要的。合併/可能意味着您拒絕合併中的任何一方的一些更改。以獲得適當的合併,最好的辦法是:

git merge --no-commit yourbranch 

從主,然後運行從上面的混帳結賬的命令,最後提交:

git add . -A 
git commit 

現在,當您按下這個分支,你需要添加force選項

git push --force 

git push -f 

希望這有助於。

+0

感謝您的回覆adymitruk,我嘗試了git'reset --hard HEAD ^',之後git push origin + master,但是我仍然收到錯誤訊息'![遠程拒絕]主機 - >主機(預接收鉤子拒絕)' – 2011-04-11 21:07:54

+0

如果您因爲推送而失去遠程提交,您需要告訴git可以使用'--force'或' -f'選項。更新答案。 – 2012-06-29 18:17:39

7

這裏的問題是,你要撤消你已經推到中央存儲庫的變化。如果你還沒有把它們推到第一位,那麼一個git reset --hard/- soft/- HEAD ^就可以完成。

所以,當你已經reseted當您嘗試推到原點和更新遠程裁判是不是一個祖先,以你的頭你的頭git的抱怨。使用--force:

git push --force origin master