在Git中,如何在保留当前分支的所有更改的同时检出旧分支,但它们只会被标记为未提交的更改或新文件.
有这样的命令git checkout-but-keep-changes branch_name吗?
Geo*_*ard 10
当您检出文件时,Git 通常会执行此操作,假设您所做的更改不是要通过结帐更改的文件.例如,假设我在存储库中有以下文件:
a.txt
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)
现在我将对文件进行更改a.txt:
a.txt (modified)
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)
现在假设我有其他的两个分支,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
Run Code Online (Sandbox Code Playgroud)
Git确实为您提供了解决此问题的方法: 存储您的更改!这会将当前更改保存为修补程序并将其撤消到工作目录中.也就是说,在运行之后git stash,将清理工作目录,并将更改放在存储堆栈上.然后,您可以签出所需的分支并运行git stash pop,这将从堆栈中弹出您的更改并将其应用于新的工作树.希望他们能干净利落地应用.如果他们不这样做,您将获得标准的合并冲突标记a.txt.值得注意的是,存储不会从堆栈弹出,因此您需要git stash drop在解析合并后执行操作.
您还可以将-m(--merge)标志传递给checkout命令,该命令表示您希望您的更改与传入的更改进行三向合并.一般来说,我更喜欢藏匿东西.
| 归档时间: |
|
| 查看次数: |
5161 次 |
| 最近记录: |