在Git中,我如何检出旧的分支并保留当前分支的所有更改,但它们只是标记为未提交的更改或新文件?
是否有像
是否有像
git checkout-but-keep-changes branch_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会提示:$ 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
之后,工作目录将被清除,并将您的更改放置到stash堆栈上。 然后,您可以检出所需的分支并运行git stash pop
,它将从堆栈中弹出您的更改并将其应用于新的工作树。 希望它们能够干净地应用。 如果不是这样,您将在a.txt
中获得标准的合并冲突标记。 值得注意的是,stash没有从堆栈中弹出,因此在解决合并后需要执行git stash drop
。-m
(--merge
)标志,表示您希望您的更改与传入的更改进行三方合并。 通常,我更喜欢隐藏东西。我在寻找 git reset --soft 命令。
抱歉我的问题表述不太清楚。