【问题标题】:ReinH Git WorkflowReinH Git 工作流程
【发布时间】:2010-10-25 17:04:24
【问题描述】:

我正在使用这个工作流程:

http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html

他提到:“首先,在您的主分支(git checkout master)中,拉入最新的更改: git pull 起源大师 这绝不应该创建合并提交,因为我们从不直接在 master 中工作。”

哎呀,我刚刚做到了。我不小心对我的主人(与我的主题分支)的几个文件进行了一些更改。然后我意识到我的错误 - 删除了我的主题分支。现在我想摆脱我提交的更改(对主人),正确的做法是什么?我还没有 rebase 或将我的更改推送到 repo,所以它都是本地的。

本质上,我想拉下最新版本的主代码,而忽略我对本地主代码所做的一切(这实际上是一次提交)。

【问题讨论】:

    标签: git


    【解决方案1】:

    如果你只是想在你的主分支上把它扔掉:

    git reset --hard HEAD^

    此命令会将您的 master 的 HEAD 指针重置为上一次提交。 (你也可以说“HEAD~1”,与 HEAD^ 的意思相同。)更一般地说,你也可以将你的 master 重置为与服务器的相同:

    git reset --hard origin/master

    无论 master 的状态如何,这都会起作用(即,在 origin 之前 5 次提交,或者在它之后 30 次提交)。这些命令中的--hard 选项意味着工作树中的文件也将与分支头一起重置。

    额外提示

    如果您遇到类似的情况,您确实想保留更改,您可以随时这样做:

    git fetch             # This grabs changes from the server without merging them
    git rebase origin

    这将在服务器上的最新更改之上重播您在 master 中所做的任何工作。

    另一种选择是为您在 master 上的工作创建一个主题分支:

    git checkout -b newfeature

    然后您可以切换回 master(git checkout master)并使用我给出的第一个命令将 master 倒回一次提交。请记住,分支实际上只是存储库中提交的方便名称。例如,master 只是对该分支上最新提交的引用。您可以随意移动这些引用,并且随着您对 git 的深入了解,您会发现自己经常这样做。

    我还建议您养成在玩树枝时运行gitk --all 的习惯,这样您就可以直观地看到自己在做什么。当我刚接触 git 时,我一直在运行这个命令。我还是...

    【讨论】:

      【解决方案2】:

      所有因分支删除而丢失的提交都在 git 中。

      您可以通过遍历 reflog 来访问所有这些。来看看

      man git-reflog
      

      【讨论】:

        猜你喜欢
        • 2017-06-09
        • 2015-05-16
        • 2021-10-11
        • 2012-01-14
        • 2014-11-02
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多