代码之家  ›  专栏  ›  技术社区  ›  DA.

如何正确切换GIT分支并返回到以后的工作。

  •  2
  • DA.  · 技术社区  · 7 年前

    我在X部门工作,更新了4个文件。现在有人要我换个档位,在Y分支工作。我还没准备好推动X分支的变化。我该怎么办?

    在过去,我以为那就是藏东西的目的。 git stash ,签出分支Y,然后返回分支X并 git stash apply

    然而,我最近做了那件事,把事情搞砸了:

    • 分支X
    • 已签出分支Y,修改的文件
    • Y分支
    • 已签出分支X
    • git stash应用 在X分行…据我所知,我在Y分行的存款申请到了X分行。

    所以我很困惑。上面发生了什么事吗?我应该在这个过程中做一些承诺吗?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Joe McMahon    7 年前

    记住,在Git中,您的更改和分支是您的,直到您将它们推到其他地方。因此,在完成大量工作后立即提交本地更改是非常安全的,甚至是一个好主意(您可以始终 rebase 以后再把它们压扁)。

    在你的情况下,这是你可以做的(即使分支 X

    git add .
    git commit -a -M'WIP: (describe where you are)'
    git checkout Y
    

    分支 在你的遥控器上保持原样,但你的本地工作是安全的。没有人会看到它,除非你 push

    如果你想保留 在最后一个干净状态下,只需签出一个新分支并向其添加提交:

    git checkout -b pick-a-descriptive-name-for-the-branch
    git commit ...   # commits land on this new branch
    git checkout Y
    

    现在 就像你开始做最新的一系列改变之前一样, pick-a-descriptive-name-for-the-branch 有你正在做的改变,还有 Y 不受影响。

    你很容易 cherry-pick 上一次提交 pick-a-descriptive... 当您准备好继续工作时:

    git checkout pick-a-descriptive-name-for-the-branch
    git log -1 # Note the SHA1 of the commit, which is your work in progress
    git checkout X
    git cherry-pick -n SHA1
    

    pick-a-descriptive-name-for-the-branch公司 ,并将它们添加到 却没有承诺。

        2
  •  2
  •   Kon    7 年前

    git stash apply git stash list 然后用 git stash apply stash@{N} .

    git stash save "some name" 所以以后更容易找到。

    git stash应用 把藏品放在藏品清单上。如果你在申请后不再需要这个藏身处,那就调查一下 git stash drop git stash pop .