我总是处于错误的分支。我要么在 master
或 main
上处理应该在 fix
或 feature
分支上的内容。或者我在上一个工作分支上,应该创建了一个新分支。好吧。这从来都不是什么大问题。基本上意味着将未暂存的更改切换到新分支。这是我通常的做法
- 暂存所有已更改但未暂存的文件
- 回到 master 分支
- 拉取 master 以确保它是最新的
- 从 master 分支创建一个新分支
- 切换到新分支
- 取消暂存这些已更改的文件
想要更多 Git 提示?我们的 “高级 Git”系列 拥有大量此类内容。
使用 Git CLI 将未暂存的更改切换到新分支,如下所示
以下是我通常在 Git 中将未暂存的更改切换到新分支的方法
git status
git stash --include-untracked
git checkout master
git pull
git branch content/sharis
git checkout content/sharis
git stash pop
在 Git Tower 中将未暂存的更改切换到新分支,如下所示
我认为理论上您也可以在 Git Tower 中一步一步地执行这些步骤来将未暂存的更改切换到新分支,但快捷方式是您可以创建分支并双击切换到它。
抱歉,我只会使用 Git Tower,但还有许多其他 Git GUI 也可能有巧妙的方法来做到这一点。
但有一种新的花哨方法!
无论如何,这种将未暂存的更改切换到新分支的方法对我来说是新的,当 Wes 发布这条推文时,对他来说也是新的
酷。那是
git switch -c new-branch
git switch
主要是git checkout
中与分支相关的命令的更简洁版本。git switch -c new-branch
所做的全部工作就是创建一个新分支并切换到它。就像git checkout -b new-branch
一样。两者都允许存在未提交的更改。git checkout
功能的其他部分现在应该使用git restore
完成。当您在功能分支上但想要从 master 分支分支时,您还可以执行
git switch -c new-branch master
。这与git switch master
后跟git switch -c new-branch
相同,并且如果您再次用git checkout -b
替换git switch -c
(例如,对于旧版本的 git),则效果相同。如果修改的文件在您的功能分支和 master 分支之间存在差异,则切换分支将失败(仅限此情况)。作为解决方法,您可以添加
-m
/--merge
标志以要求 git 尝试合并这两个更改。无论如何,您可能与上游 master 不一致。因此,您仍然需要
git pull
。当您有未提交的更改时,这又会成为问题。在这种情况下,可以使用--autostash
标志。不过,我不确定这能简化多少事情 ;-)因此,总而言之,我想说您明确使用 stash 仍然是一个好方法,因为您正在使用简单的 git 命令并完全控制正在发生的事情。或者,如果您确实希望避免暂存,则以下内容将等效
如果您还想同时将
master
更新为origin/master
,则可以执行为什么不直接使用
它会自动将所有未暂存的更改传输到新创建的分支。
git switch
似乎也执行类似的操作,但使用的是已提交的内容。我昨天刚刚用过它,很快就会尝试一下。太棒了!在看到您的文章后,我立即看到了 @wes 发布的关于此的推文,并认为 #英雄所见略同!
我迫不及待地想使用它!
#非常感谢