git 临时切换分支

2023-11-15 10:36:33 +08:00
 yujianwjj

大家在开发过程中,遇到需要切换分支的情况,比如需要紧急修复一个线上 bug 。这个时候,是使用 git commit 临时保存本地代码还是使用 git stash 。

19067 次点击
所在节点    git
122 条回复
SenLief
2023-11-15 11:04:56 +08:00
git stash 不就是做这个嘛?
Tubering
2023-11-15 11:05:40 +08:00
stash 比较多
不过也有在 stash 里存太久,list 的时候看到都忘了干嘛的
4ark
2023-11-15 11:06:57 +08:00
worktree 才是最优解
Vegetable
2023-11-15 11:08:34 +08:00
建议是
git commit -m "wip: 还没做完"
因为你的 hotfix 要做多久很难说,况且除了 hotfix 还有别的情况需要临时切换工作分支。stash 其实可以实现与 commit 几乎一样的能力,但是我不喜欢再记一套 stash push 之类的命令,我只在确认自己几分钟之后就会 pop 的情况下用 stash 。

对于 commit 记录,使用 git rebase 可以清理
vchroc
2023-11-15 11:09:19 +08:00
jetbrains 系 IDEA ,无此问题
pkoukk
2023-11-15 11:10:54 +08:00
@flyqie #2 rebase 修一下不就完了
pkoukk
2023-11-15 11:14:22 +08:00
我用 commit ,不理解为啥用 stash ,这些内容在你要修的线上分支可能会用到么?如果用不到 stash 它干嘛。
说一个暴论,在当前 git 有 rebase 和 cherry pick 功能以后,stash 没有太大的价值了
swaggeek
2023-11-15 11:17:10 +08:00
用 idea 的话,有个 shelve change 的功能
Leviathann
2023-11-15 11:20:04 +08:00
@swaggeek 这个和 stash 有什么区别
28Sv0ngQfIE7Yloe
2023-11-15 11:20:44 +08:00
百分之八十的开发者都用不明白 rebase
qxooqx
2023-11-15 11:22:38 +08:00
@zjp stash 后容易忘记在那个分支上执行 pop ,commit 的话可以在提交记录中快速找到分支并切回去,然后只要取消 commit 就可以了
TAFMT
2023-11-15 11:23:48 +08:00
git stash
Colderer
2023-11-15 11:23:50 +08:00
@pkoukk 呵呵,stash 完美贴合这个使用场景;暂存完,切 hotfix 分支,修完 bug ,切回原分支,stash pop ,继续干活
whosesmile
2023-11-15 11:29:45 +08:00
1. git stash 后面可以在 pop 回来
2. git commit 但是不要 push ,后面接着修改后,等到正式提交的时候,可以 git commit --amend
3. git commit 并且推送到仓库了,后面如果修改后想覆盖前面的提交,只要你能确认这个分支之前的 commit 没有其他人在使用,可以 push --force ,**一定要确认没其他人在使用**
Rehtt
2023-11-15 11:34:15 +08:00
@pkoukk 如果这个时候无意间推送远程了,而公司远程仓库又禁用 rebase
HarryQu
2023-11-15 11:34:36 +08:00
如果是用 IntelliJ IDEA 的 IDE ,我推荐使用 IntelliJ IDEA 的 Shelves Changes 功能,也非常好用。

Shelves Changes 所实现的功能和 git stash 所实现的功能类似。

Shelf 的中文意思是书架,复数是 shelves 。但 Shelves Changes 功能是 IntelliJ IDEA IDE 的功能,并不是 Git 命令。
zhuangpipi
2023-11-15 11:35:44 +08:00
一般有多个 worktree ,直接再开个窗口好
HarryQu
2023-11-15 11:36:27 +08:00
Shelves Changes ,我以前总结的一片文章,可以参考下: https://www.hi-cat.cn/11953
ruchee
2023-11-15 11:54:29 +08:00
相同的工程代码,常年保持至少三个仓库备用,命名分别叫 repo1 、repo2 、repo3 ,使用时用软链接链过去,比如 ln -s repo1 repo 。

这样,项目路径就是 repo ,然后临时有别的任务要搞,那就删了原来的软链接,重新链一个别的目录,比如 ln -s repo2 repo 。

无缝衔接,丝滑得很。
z1645444
2023-11-15 11:54:48 +08:00
最方便的还是 git stash 来回跑,stash 也是为此而生的,为什么要给 commit 语义施加更多负担,最后还要涉及到 rebase 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/992022

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX