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

时间:2014-10-10 19:17:05

标签: git branch

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

是否有像git checkout-but-keep-changes branch_name这样的命令?

2 个答案:

答案 0 :(得分:10)

当您检出文件时,

Git normally does this,假设您所做的更改不是要通过结帐更改的文件。例如,假设我在存储库中有以下文件:

a.txt
b.txt
c.txt

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

a.txt (modified)
b.txt
c.txt

现在假设我有两个其他分支a-changedb-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

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

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

答案 1 :(得分:0)

我正在寻找一个git reset --soft

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