【问题标题】:git branching - how to make current master a branch and then revert master back to previous version?git 分支 - 如何使当前的 master 成为一个分支,然后将 master 恢复到以前的版本?
【发布时间】:2011-10-09 13:02:42
【问题描述】:

这可能很简单,但我目前是一个 git 菜鸟,还没有完全了解 git 分支模型。

假设我目前除了master 之外没有任何分支,但现在我做了一些更改,因为我决定不想保留上次提交(注意:更改尚未提交)。不过,我还不想摆脱这些更改 - 我想将它们放在自己的分支中(例如 experimental_stuff),然后从我之前的提交继续开发。所以我猜步骤是:

  • 将当前的 master 设为一个分支 (git branch experimental_stuff ?)
  • 返回上一个提交 (git checkout <last_commit> ?)
  • 将此作为我的新主分支,以便将来的提交从这里继续 (git ??? ?)

这是正确的方法吗?最后一部分需要什么 git 命令(如果有的话)?

[注意:这只是我个人使用的本地 git 存储库,如果有什么不同的话。]

【问题讨论】:

    标签: git git-branch


    【解决方案1】:

    你差不多完成了。

    假设您已提交开发文件。那么..

    git 分支experimental_stuff

    git reset --hard HEAD^(返回主分支的上一次提交以继续开发)

    假设您尚未对开发文件进行提交。然后.. 您需要将当前更改保存到临时目录

    git 存储

    git checkout -b experimental_stuff(创建分支并将其更改为experiental_stuff)

    git stash pop(将临时目录填充到实验分支)

    git checkout master(返回master,这次不需要返回之前的commit,因为你没有那个commit)

    【讨论】:

    • 好的 - 谢谢 - 如果我还没有提交我当前的更改怎么办?我只是提交它们然后使用上面的吗?
    • 好吧,您可以将这些当前更改(我们具体称为工作目录)保存到临时空间。好吧,也许我会在答案中添加更多内容。
    • 推荐您安装gitk,这是一个运行git的GUI应用程序,一旦您熟悉了git在GUI上的工作方式,命令行工具将是一个更快的应用程序来帮助您。
    • 好的——与此同时,我似乎陷入了混乱——我检查了我的更改,创建了一个分支,然后尝试了git reset --hard ^HEAD,但我得到了一个错误:fatal: ambiguous argument '^HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions
    • 第二步(返回master)是不必要的。创建分支不会检​​查它,所以在 'git branch experimental' 之后,你仍然在 master 上。另外,'git branch e-s; 的第一步; git checkout -b e-s' 是不必要的,因为 'git checkout -b' 会为您完成该步骤。 -b 的全部意义在于它创建了一个新分支供您结帐。 IOW,'git checkout -b foo' 等同于 'git branch foo; git checkout foo'
    【解决方案2】:

    假设我目前没有这样的分支

    只是为了纠正你:你总是在 Git 中至少有一个分支。甚至 master 也是一个分支,具有与任何其他分支相同的功能。并且 Git 不会处理名为 master 的分支而不是另一个分支。这只是一个约定,大多数开发人员将他们的主分支命名为“master”,但您不需要这样做。您甚至可以删除您的主分支并创建开发、发布等分支。对于您的问题本身:Kit Ho 的答案很好。

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多