Git:检查一个保持未提交更改的分支

Dre*_*eur 7 git branch

在Git中,如何在保留当前分支的所有更改的同时检出旧分支,但它们只会被标记为未提交的更改或新文件.

有这样的命令git checkout-but-keep-changes branch_name吗?

Geo*_*ard 10

当您检出文件时,Git 通常会执行此操作,假设您所做的更改不是要通过结帐更改的文件.例如,假设我在存储库中有以下文件:

a.txt
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)

现在我将对文件进行更改a.txt:

a.txt (modified)
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)

现在假设我有其他的两个分支,a-changed并且b-changed,其中a.txtb.txt分别被修改.

如果我试图检查b-changed,Git会毫无怨言地这样做,因为我的工作目录更改不会与在该分支上所做的更改冲突.但是,如果我尝试检查a-changed,Git不会这样做,因为我对我的本地副本进行了更改,并且结帐会破坏它们.Git说:

$ git checkout a-changed
error: Your local changes to the following files would be overwritten by checkout:
        a.txt
Please, commit your changes or stash them before you can switch branches.
Aborting
Run Code Online (Sandbox Code Playgroud)

Git确实为您提供了解决此问题的方法: 存储您的更改!这会将当前更改保存为修补程序并将其撤消到工作目录中.也就是说,在运行之后git stash,将清理工作目录,并将更改放在存储堆栈上.然后,您可以签出所需的分支并运行git stash pop,这将从堆栈中弹出您的更改并将其应用于新的工作树.希望他们能干净利落地应用.如果他们不这样做,您将获得标准的合并冲突标记a.txt.值得注意的是,存储不会从堆栈弹出,因此您需要git stash drop在解析合并后执行操作.

您还可以将-m(--merge)标志传递给checkout命令,该命令表示您希望您的更改与传入的更改进行三向合并.一般来说,我更喜欢藏匿东西.


Dre*_*eur 0

我一直在寻找 git reset --soft

抱歉我的问题不是很清楚。