Git:取消提交的命令

时间:2016-08-17 17:31:51

标签: git

当我工作时,我经常会遇到这个工作流程:

  1. 做点什么。
  2. 有人来到我的办公桌前问了一些问题,我必须搬到另一个分店进行检查。
  3. 我在当前分支上提交代码并结帐另一个分支。
  4. 当我完成时,我会检查旧分支并继续工作。
  5. 此工作流程有一个缺点:它在我的系统中生成虚拟提交。我的问题是:我怎样才能避免这种情况?例如,当我回来工作时,我会取消之前的提交吗?

4 个答案:

答案 0 :(得分:6)

除了现有的两个答案(git resetgit stash)之外,我个人只是忽略了额外的提交(几乎有wip的提交消息...)直到我我准备将变化推向遥远的地​​方,例如到github创建一个拉取请求。

此时,我使用git rebase -i查看我在该分支中提交的所有提交,并计算出我想要推送的提交 - 将提交压缩在一起并根据需要重写提交消息。

我个人认为这比git stash更容易使用,因为我通常会发现我忘记了什么东西是什么意思。 (我的错,而不是git中的一个缺陷,但效果仍然很糟糕。)我怀疑git reset也没关系,但我总是在最终合并之前不得不重新定义 - 例如对代码审核评论作出反应 - 我git rebase作为我工作流程中更具智力的部分。

答案 1 :(得分:3)

您可以正确使用git stash。当有人来到您的办公桌时,请git stash临时“搁置”您当前的工作。检查另一个分支,做你的事情,然后,当他们离开时,切换回你的工作分支并做git stash pop

确保您没有暂时进行任何更改 - git stash,如果内存服务,则忽略暂存的更改和未跟踪的文件。

答案 2 :(得分:3)

切换回旧分支后,运行git reset HEAD^,您将返回到之前的状态。最新的临时提交将被丢弃。如果您已推送该提交,则需要 - 强制执行新推送。

答案 3 :(得分:2)

听起来你需要git stashCheck out this site for usage.您的工作流程将如下所示:

git stash(存储此分支的更改)

git checkout otherBranch(然后做你的工作)

git checkout firstBranch(回到原来的工作)

git stash apply(将未提交的更改置于其后)

您还可以使用git rebase -i删除一些现有的虚拟提交see this