【发布时间】:2021-05-01 12:24:26
【问题描述】:
我在branch1 中对我的代码进行了一些更改,但现在我需要将这些更改移动到另一个分支。从图形上看,我有:
master
|___develop
|___branch1
我需要将所有未提交的更改和未跟踪的文件移动到新分支branch2(不存在):
master
|___develop
|___branch1
|___branch2
之后我将删除 branch1,因为它的所有更改都已推送,并留下 branch2 中所有未提交的更改和未跟踪的文件:
master
|___develop
|___branch2
SO中有很多类似的问题,但我仍然不确定我应该如何处理我的情况。有人说使用git stash (How do I merge my local uncommitted changes into another Git branch?, moving changed files to another branch for check-in) 在我的情况下我猜是:
git stash -u
git checkout develop
git checkout -b branch2
git stash pop
但其他答案(Put current changes in a new Git branch、Moving uncommitted changes to a new branch)说只需将checkout 用作:
git checkout -b branch2
但我不确定这是否也会携带我未跟踪的文件。有一个较新的答案建议使用switch (Move existing, uncommitted work to a new branch in Git),但我的git 2.17.1 版本没有这个命令。
任何帮助将不胜感激。
【问题讨论】:
-
我很确定您描述您提到的第一种方法的命令(git stash -u 等)会起作用。因为 -u 标志实际上是 --include-untracked,这是你需要的。
-
switch与checkout并没有什么不同;相反,它是对checkout功能子集的更准确描述。restore是另一个新命令,它将执行checkout所做的任何switch所做的事情。在switch和restore之间,应该不需要使用checkout,它可以被淘汰。
标签: git git-branch git-commit git-stash