在Git中,我如何检查旧分支,同时保留当前分支的所有更改,但它们只会被标记为未提交的更改或新文件。
是否有像git checkout-but-keep-changes branch_name
这样的命令?
答案 0 :(得分:10)
Git normally does this,假设您所做的更改不是要通过结帐更改的文件。例如,假设我在存储库中有以下文件:
a.txt
b.txt
c.txt
现在我将对文件a.txt
进行更改:
a.txt (modified)
b.txt
c.txt
现在假设我有两个其他分支a-changed
和b-changed
,其中a.txt
和b.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
抱歉,我的问题不是很清楚。