V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mekingname
V2EX  ›  问与答

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

  •  
  •   mekingname · 2021-07-02 14:44:15 +08:00 · 1554 次点击
    这是一个创建于 1275 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了叙述方便,我们假设项目 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 分支上面去。

    14 条回复    2021-07-05 13:57:51 +08:00
    yuang
        1
    yuang  
       2021-07-02 14:45:10 +08:00 via Android   ❤️ 3
    cherry pick
    cloudzqy
        2
    cloudzqy  
       2021-07-02 14:55:23 +08:00   ❤️ 1
    这种我一般用最朴实的操作去解决。
    先 git stash,然后 checkout 到 dev,然后 git stash pop,如果有冲突,然后解决冲突。
    虽然比较 low 但是因为指令比较熟,可控。
    Jooooooooo
        3
    Jooooooooo  
       2021-07-02 14:59:41 +08:00   ❤️ 1
    git stash, 保存住内容

    git checkout dev, 可以顺利切分支

    git stash pop, 在 dev 下刚刚保存的内容出来了
    mekingname
        4
    mekingname  
    OP
       2021-07-02 15:15:18 +08:00
    wuxi889
        5
    wuxi889  
       2021-07-02 17:46:22 +08:00
    sourcetree 解君愁
    yianing
        6
    yianing  
       2021-07-02 18:43:08 +08:00 via Android
    cherry-pick +1
    Thinklong
        7
    Thinklong  
       2021-07-02 18:49:54 +08:00   ❤️ 1
    特别不理解,很多 git 命令不会,还不用 git 可视化工具,贼爱用命令
    msg7086
        8
    msg7086  
       2021-07-03 02:04:19 +08:00
    常见两种做法。
    1. 依赖 stash,先存进 stash,然后切换分支,然后放出来。
    2. 依赖 commit,先提交成 commit,然后 rebase 分支。
    tnhmcm
        9
    tnhmcm  
       2021-07-03 15:20:13 +08:00
    我常用的操作:git checkout -m <branch_name>
    checkout 的参数-m (merge) 可以带着工作区的内容切换分支
    mekingname
        10
    mekingname  
    OP
       2021-07-05 10:30:33 +08:00
    @tnhmcm 你这个难道不是切换分支,然后把 main 的代码 merge 到 dev ?
    mekingname
        11
    mekingname  
    OP
       2021-07-05 10:31:37 +08:00
    @Thinklong 我可以通过 Makefile 把多个命令整合起来。但没有办法把可视化工具里面的多次鼠标点击事件整合起来。
    Thinklong
        12
    Thinklong  
       2021-07-05 10:43:05 +08:00
    @mekingname 请审题,我很多 git 命令不会的人,还不用可视化工具,git 命令都会的人,也不会遇到 lz 这种问题
    tnhmcm
        13
    tnhmcm  
       2021-07-05 13:29:01 +08:00
    @mekingname 并不是那样哦,你可以动手试验一下。
    mekingname
        14
    mekingname  
    OP
       2021-07-05 13:57:51 +08:00
    @Thinklong 知道你很厉害了。你在我的帖子下面让我审题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2781 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:53 · PVG 20:53 · LAX 04:53 · JFK 07:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.