1

在一个新项目中,我们有一个刚接触 git 的团队,我们开始直接在master上提交。我们不小心在 master 上做了一些错误的提交,这些提交被推送到中央仓库并被整个团队撤下。

意识到我们的错误,我们在错误提交之前创建了一个功能分支。我们的团队现在正在愉快地开发功能分支。

我们现在希望我们的主分支包含来自特性分支的确切代码,而不是重新引入错误的提交

我看到该merge theirs选项已从 git 的更高版本中删除。那么丢弃错误提交并使我们的 master 看起来与我们的功能分支完全一样的最佳方法是什么?

  • 合并?
  • 重置?
  • 变基?
4

2 回答 2

6

如果你想回到 HEAD (前一个)你可以这样做:

git reset --hard HEAD@{1}

注意:工作目录更改会丢失。

你也可以检查这个[git命令]: http: //git-scm.com/book/en/Git-Basics-Undoing-Things

一旦您回到稳定版本而没有错误提交,您可以将您的功能分支合并到主分支

git checkout master_branch

然后,您将使用上述命令切换到 master

git pull origin master

拉主分支

git merge feature_branch

这将使用功能分支更改更新主节点。现在两个分支都是一样的。

于 2013-07-16T11:27:58.237 回答
2

有(至少)两种方法可以得到你想要的,这可能会导致不同的历史。你选择哪一个取决于你对 git 数据结构和管道的舒适程度。

首先,您与两个父级进行合并提交:当前主控和功能分支的尖端。本次提交的内容与父分支的提示内容完全相同。最简单的方法是运行合并( ),然后在提交结果之前git merge --no-commit用功能分支(我认为)中的内容替换索引的内容。git reset FEATURE_BRANCH

在第二个中,您向 master 添加一个提交,在手动合并到功能分支之前撤消所有狡猾的提交。 git revert可以帮助解决这个问题,或者您可以使用git checkout LAST_GOOD_COMMIT将代码恢复到上次良好提交时的状态,并将其作为 master 的提示提交。最后,像往常一样合并(或变基)。

我经常发现它有助于绘制树的当前结构和我想要的结构,然后计算出我需要哪些 git 操作才能从一个到另一个。请记住在副本上工作,并且在任何情况下,reflog 都会存储您的所有历史记录:)。

于 2013-07-16T11:54:32.000 回答