请问使用 Git 的时候,在错误分支上的修改怎么迁移到另一个分支上。

2021-07-02 14:44:15 +08:00
 mekingname

为了叙述方便,我们假设项目 Test 有一个 main 分支,里面有一个文件 a.py ,这个文件有 200 行代码。

我现在 git checkout -b dev 切换到 dev 分支。然后把后 100 行代码改了。这样一来,main 分支和 dev 分支里面,对应的 a.py 文件前 100 行完全相同。后 100 行完全不同。

以上是前提。

今天,我原本想修改 dev 分支里面的代码,在 a.py 的前 100 行中改了 30 行内容。但是改完才发现我现在在 main 分支。

现在,如果我直接执行git checkout dev,那么 git 会报错:

error: 您对下列文件的本地修改将被检出操作覆盖:
a.py
请在切换分支前提交或贮藏您的修改。
正在终止

请问,有什么办法把我这次的修改转到 dev 分支上面去。

1511 次点击
所在节点    问与答
14 条回复
yuang
2021-07-02 14:45:10 +08:00
cherry pick
cloudzqy
2021-07-02 14:55:23 +08:00
这种我一般用最朴实的操作去解决。
先 git stash,然后 checkout 到 dev,然后 git stash pop,如果有冲突,然后解决冲突。
虽然比较 low 但是因为指令比较熟,可控。
Jooooooooo
2021-07-02 14:59:41 +08:00
git stash, 保存住内容

git checkout dev, 可以顺利切分支

git stash pop, 在 dev 下刚刚保存的内容出来了
mekingname
2021-07-02 15:15:18 +08:00
wuxi889
2021-07-02 17:46:22 +08:00
sourcetree 解君愁
yianing
2021-07-02 18:43:08 +08:00
cherry-pick +1
Thinklong
2021-07-02 18:49:54 +08:00
特别不理解,很多 git 命令不会,还不用 git 可视化工具,贼爱用命令
msg7086
2021-07-03 02:04:19 +08:00
常见两种做法。
1. 依赖 stash,先存进 stash,然后切换分支,然后放出来。
2. 依赖 commit,先提交成 commit,然后 rebase 分支。
tnhmcm
2021-07-03 15:20:13 +08:00
我常用的操作:git checkout -m <branch_name>
checkout 的参数-m (merge) 可以带着工作区的内容切换分支
mekingname
2021-07-05 10:30:33 +08:00
@tnhmcm 你这个难道不是切换分支,然后把 main 的代码 merge 到 dev ?
mekingname
2021-07-05 10:31:37 +08:00
@Thinklong 我可以通过 Makefile 把多个命令整合起来。但没有办法把可视化工具里面的多次鼠标点击事件整合起来。
Thinklong
2021-07-05 10:43:05 +08:00
@mekingname 请审题,我很多 git 命令不会的人,还不用可视化工具,git 命令都会的人,也不会遇到 lz 这种问题
tnhmcm
2021-07-05 13:29:01 +08:00
@mekingname 并不是那样哦,你可以动手试验一下。
mekingname
2021-07-05 13:57:51 +08:00
@Thinklong 知道你很厉害了。你在我的帖子下面让我审题。

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

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

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

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

© 2021 V2EX