Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:取消提交的命令_Git - Fatal编程技术网

Git:取消提交的命令

Git:取消提交的命令,git,Git,当我工作时,我经常遇到以下工作流: 做点什么 有人来到我的办公桌前问我一些问题,我必须搬到另一家分店去检查 我在当前分支上提交代码并签出另一个分支 当我完成后,我结帐旧分行并继续工作 此工作流有一个缺点:它在我的系统中生成一个虚拟提交。我的问题是:我如何避免这种情况?例如,当我回来工作时,我将取消上一次提交?您可以使用git stash来实现这一点。当有人来到你的办公桌旁时,做一个git stash暂时“搁置”你当前的工作。检查另一个分支,做你自己的事情,然后,当他们离开时,切换回你的工作分支,

当我工作时,我经常遇到以下工作流:

  • 做点什么
  • 有人来到我的办公桌前问我一些问题,我必须搬到另一家分店去检查
  • 我在当前分支上提交代码并签出另一个分支
  • 当我完成后,我结帐旧分行并继续工作

  • 此工作流有一个缺点:它在我的系统中生成一个虚拟提交。我的问题是:我如何避免这种情况?例如,当我回来工作时,我将取消上一次提交?

    您可以使用
    git stash
    来实现这一点。当有人来到你的办公桌旁时,做一个
    git stash
    暂时“搁置”你当前的工作。检查另一个分支,做你自己的事情,然后,当他们离开时,切换回你的工作分支,做
    git stash pop


    确保没有任何更改处于暂存状态,但是-
    git stash
    ,如果内存可用,则会忽略暂存的更改和未跟踪的文件。

    切换回旧分支后,运行
    git reset HEAD^
    ,您将返回到以前的状态。将丢弃最新的临时提交。如果你已经推送了提交,你需要--强制一个新的推送。

    听起来你需要
    git-stash
    。您的工作流程将如下所示:

    git stash
    (隐藏对此分支所做的更改)

    git checkout otherBranch
    (然后完成您的工作)

    git checkout firstBranch
    (返回原始作业)

    git stash apply
    (将未提交的更改放回原处)


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

    除了两个现有答案(
    git-reset
    git-stash
    )之外,我个人只会忽略额外的提交(几乎有一条提交消息
    wip
    )直到我准备好将更改推送到远程位置,例如到github以创建拉取请求

    此时,我使用
    git rebase-I
    查看该分支中的所有提交,并确定要推送哪些提交—将提交挤压在一起,并根据需要重新编写提交消息

    我个人发现这比git stash更容易使用,因为我通常会发现我不知道隐藏的目的是什么。(我的错不是git中的缺陷,但效果仍然不好。)我怀疑
    git reset
    也可以,但由于在最终合并之前我通常必须重新设置基址(例如,为了对代码审阅评论作出反应),我将
    git-rebase
    作为我工作流程中更有效的一部分

    使用隐藏你可以在这里找到你的答案