2013-06-05 105 views
1

我意識到我們的分支dev不是很穩定,並且還原了一些更改以調試它們。如何在「git reset --hard」之後恢復更改

git checkout dev 
git checkout -b staged_dev 
git push origin staged_dev 
# go back to dev 
git checkout dev 
git reset 230086bf429307182ed9b35e19ad2581a3a2baf6 # last known stable state of dev 
git reset --soft [email protected]{1} 
git commit -m "Revert to 230086bf429307182ed9b35e19ad2581a3a2baf6" # this commit SHA = 270329c 
git reset --hard 
git push origin dev 

這增加了對開發之上的新的承諾:270329c

從那時起另一個人增加了一些安全提交給戴維和我都已經調試staged_dev並增加了一些提交。如何從dev中撤消270329c並將其他提交的staged_dev添加到dev中?

參考計算器問題:Revert to a commit by a SHA hash in Git?

回答

1

git reflog應該告訴你,事情是這樣,你可以從它創建一個old_dev分支。

reflog, your safety net

+1

+1用於喚起人們對'git reflog'的關注 - 如果對修訂歷史記錄有困惑,這將是必不可少的。但我認爲@謙遜是明確的;問題是如何管理合並這些分支前進 – gcbenison

+0

我只是在回答'怎麼回覆變更後的git-reset-hard''考試'問題,而不是推論; - ) –

0

你最簡單的選擇可能只是:

git checkout dev 
git merge staged_dev 
git push origin dev 

如果你不愉快的歷史產生的,您可以先衍合你的修改後變爲「開發」的提示分支:

git checkout staged_dev 
git rebase dev 
git checkout dev 
git merge staged_dev 

如果你想在「staged_dev」修改後承諾採取在日同一個地方作爲原始230086提交的歷史記錄,您將必須獲得更多的發現,並且如果沒有刪除已在「原始」中發佈的「dev」中的修訂歷史記錄,則無法這樣做。但是,如果這就是你真正需要的,你可以這樣做:

git checkout -b new-dev 230086bf # point where "dev" diverged 
git cherry-pick <first commit you want to include*>..staged_dev 
git checkout -t origin/dev 
git rebase new-dev 
git push origin +dev 

你可能想公佈給大家,他們擁有的「開發」本地檢出可能不再是在上游的歷史。

相關問題