我尝试从一个本地分支转到另一个分支。 Git告诉我,我不能这样做,因为我local changes to the following files would be overwritten by checkout
。
然后我得到一个"推荐" Please, commit your changes or stash them before you can switch branches
。
我知道我不需要对上述文件进行更改。可以覆盖它们。所以,我尝试stash
。我执行git stash file_name
。结果我得到了:
Usage: git stash list [<options>]
or: git stash show [<stash>]
or: git stash drop [-q|--quiet] [<stash>]
or: git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
or: git stash branch <branchname> [<stash>]
or: git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [<message>]]
or: git stash clear
行。这是行不通的。然后我尝试git checkout file_name
。没有抱怨git。然后我可以从一个分支切换到另一个分支。所以,似乎我得到了我需要的东西(转到第二个分支而不保存对第一个分支的更改)。
但是,我想问一下为什么stash
不起作用,以及最终结果如何起作用会有所不同?
答案 0 :(得分:7)
您无法显式存储单个文件。如果你运行git-stash
它会隐藏你所有的修改。
git checkout -- file
会丢弃您在工作目录中对该文件所做的更改,并检查当前提交记录的该文件的版本(即HEAD指向的那个)。
答案 1 :(得分:3)
self-join
分两步完成:
git stash
然后您又回来了,全速工作。弹出您的存储会从存储中删除更改并将其重新应用到您的工作副本。
或者,您可以将更改重新应用到工作副本,并使用git stash pop
将其保存在存储中。
git stash apply
会丢弃您在工作目录中对该文件所做的更改,并检查当前提交记录的该文件的版本(即HEAD指向的那个)。
答案 2 :(得分:1)
git stash
将您的更改保存到“存储”中 - 这看起来像是一堆临时提交。可以看到git stash list
。
使用git stash
,可以存储某些文件甚至是大块代码。试试git stash save -p
。它将以交互方式询问您要保存的内容
另一种方法是使用git add
添加所有文件,但要添加一个文件。然后运行git stash save -k
。它存储了已更改的文件(git status
中的红色),没有准备提交的文件(git status
中的绿色)。
答案 3 :(得分:0)
在需要更改分支时进行提交更改,您可以使用git stash
命令将更改保存到一堆未完成的更改。
如果您只需要隐藏已完成作品的选定部分,则可以使用git stash -p
。要重用已保存的更改,请使用git stash pop
命令。
在git checkout
命令中,如果您将命令设为git checkout
,则工作树将指向当前HEAD
。 git checkout branchname
当您从分支机构签出时,如果存在未更改的更改,则这些更改将作为已修改的更改添加到新签出分支。 git checkout filepath
当您使用带有文件路径的结帐时,文件的未经修改的更改将会丢失。