1

我意识到我们的分支 dev 不是很稳定,并恢复了一些更改以进行调试。

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 HEAD@{1}
git commit -m "Revert to 230086bf429307182ed9b35e19ad2581a3a2baf6" # this commit SHA = 270329c
git reset --hard
git push origin dev

这在 dev 之上添加了一个新的提交:270329c

从那时起,另一个人向 dev 添加了一些安全提交,我调试了 staged_dev 并添加了一些提交。如何270329c从 dev 撤消并将 staged_dev 的其他提交添加到 dev ?

参考 stackoverflow 问题:Revert to a commit by a SHA hash in Git?

4

2 回答 2

1

git reflog应该向您显示事物的位置,以便您可以从中创建 old_dev 分支。

查看reflog,您的安全网

于 2013-06-05T15:40:50.337 回答
0

您最简单的选择可能只是:

git checkout dev
git merge staged_dev
git push origin dev

如果您对生成的历史记录不满意,可以首先将修改后的更改重新定位到“dev”分支的尖端:

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

如果您希望“staged_dev”中的修订提交与原始 230086 提交在历史记录中的位置相同,那么您将不得不变得更加出色,并且如果不删除“dev”中的修订历史记录,就无法做到这一点已经在 "origin" 上发表过。但是,如果这是您真正需要的,您可以执行以下操作:

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

您可能想向所有人宣布,他们对“dev”的本地结帐可能不再出现在上游历史记录中。

于 2013-06-05T21:05:11.877 回答