Git储藏后每次切换分支

3
每次我在本地Git仓库切换到不同的分支时,我需要执行以下操作:
1. git stash
2. git checkout branch_name
3. git stash pop stash@{0}

我可以通过检出的分支获取我的工作目录和暂存目录。

有没有更好、更短的方法来做这件事呢?不管是技巧/解决方法还是直接内置命令。

我简化的方法是通过以下ZSH别名实现:

myfunction() {
    git stash
    git checkout $1
    git stash pop stash@{0}
}
alias gcost=myfunction

1
小的提交和短期分支 - Davin Tryon
1
为什么在切换分支时,你总是需要隐藏更改?通常情况下,你应该在干净的工作目录中切换分支,因为你已经提交了所有更改。看起来问题在于你正在编辑代码,然后在没有提交编辑的代码的情况下切换分支。 - mkasberg
4
这是一个非常糟糕的想法,因为如果没有需要存储的内容,git stash命令将不起作用,随后的git stash pop命令会弹出错误的存储内容。用户torek在网站上有一篇很好的文章谈到了这个问题... - jub0bs
1
@mkasberg 是的,主要有两个原因:1. 在我的当前项目中,我有一些配置文件需要编辑但不能提交或忽略它们,所以我将它们保存在我的工作目录中。我认为这可以通过取消对本地仓库的索引来解决;2. 我在仍在工作的分支之间切换,以修复一些在我用于打开 GitHub PR 并推送到它的分支中出现的问题,或者在另一个功能分支上添加更多工作。 - Wazery
1
@IslamWazery 请查看https://dev59.com/yWIj5IYBdhLWcg3wPy0a#20480591 - jub0bs
显示剩余5条评论
2个回答

4

更简便的方法是切换到另一个分支而不进行暂存。只要没有冲突,更改就会留在您的工作副本中(如果有冲突,则切换将被拒绝,并且您可以使用暂存/取消暂存方法)。换句话说:未提交的更改会自动跟随您从一个分支到另一个分支。


-1

我建议以下流程,我称之为Work-In-Progress(WIP)。

在错误修复分支上

git checkout bug_fix_branch
edit some code
git add -u
git commit -m 'WIP: Fix: Bug in network driver e1000'

在功能分支上

git checkout feature_branch
git cherry-pick commit-id-of-the-above-commit
edit some code
git add -u
git commit --amend # update the last "WIP" commit with the changes

当 bug 修复或功能准备好推送时,只需使用 git commit --amend 命令删除 "WIP" 前缀,然后进行推送。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接