Git:签出保留未提交更改的分支

Git:签出保留未提交更改的分支,git,branch,Git,Branch,在Git中,我如何签出一个较旧的分支,同时保留当前分支中的所有更改,但这些更改只会被标记为未提交的更改或新文件 是否有类似于“git checkout but keep changes branch\u name”的命令?git在签出文件时,假设您所做的更改不是签出时要更改的文件。例如,假设存储库中有以下文件: a.txt b.txt c.txt 现在我将更改文件a.txt: a.txt (modified) b.txt c.txt 现在假设我还有另外两个分支,a-changed和b-cha

在Git中,我如何签出一个较旧的分支,同时保留当前分支中的所有更改,但这些更改只会被标记为未提交的更改或新文件

是否有类似于“
git checkout but keep changes branch\u name
”的命令?

git在签出文件时,假设您所做的更改不是签出时要更改的文件。例如,假设存储库中有以下文件:

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 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确实为您提供了一种解决此问题的方法:!这会将当前更改保存为修补程序,并在工作目录中撤消它们。也就是说,在运行
git stash
之后,工作目录将被清理,您的更改将被放置到stash堆栈中。然后,您可以签出所需的分支并运行
git stash pop
,这将弹出堆栈中的更改,并将它们应用到新的工作树。希望它们能干净地应用。如果没有,您将在
a.txt
中获得标准的合并冲突标记。值得注意的是,隐藏不会从堆栈中弹出,因此在解析合并后,需要执行
git隐藏删除操作


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

我在找一个git重置软件


对不起,我的问题不太清楚。

不清楚你在问什么。当你说“我的更改”时,你指的是对以前分支的提交,还是修改的文件,还是?@AndrewC谢谢,我更新了我的问题。3340的答案涵盖了这种情况下的大部分内容。