V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
lepig
V2EX  ›  git

Git 从远程拉取后发现需要自动合并!如何取消自动合并

  •  
  •   lepig · 2019-03-06 09:10:09 +08:00 · 11798 次点击
    这是一个创建于 2078 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

    多人开发,每天早上拉一次新代码,然后进行任务开发。但是如果在我 push 之前已经有人 push 了,那么我就要先合并他的代码。 这个时候我执行git pull会出现下面的提示。

    git pull

    我的命令行是 windows 下面的zsh环境

    期望

    因为我大部分时间都是在命令行执行rebase操作,然后在执行git pull,这样就能最大化的保持 commit 记录是一条直线。但是有时候不小心就执行了pull后就会出现这个提示框。 不管我输入:q还是:q!命令行都会自动合并。产生了一次合并提交。

    我的期望是在这个交互窗口如何取消这次自动合并,我手动执行 rebase 操作。

    谢谢大家

    第 1 条附言  ·  2019-03-06 11:04:29 +08:00

    感谢楼下大佬们的方法。

    配置一下就可以一劳永逸了

    git config --global pull.rebase true
    

    虽然删commit message可以,但是更倾向于全局配置。感谢大伙们的热心回复。

    qing0304
        1
    qing0304  
       2019-03-06 09:11:47 +08:00
    建分支?
    AlphaTr
        2
    AlphaTr  
       2019-03-06 09:12:37 +08:00   ❤️ 1
    git fetch
    leo108
        3
    leo108  
       2019-03-06 09:13:57 +08:00   ❤️ 4
    git config --global pull.rebase true

    然后之后所有的 pull 操作都会自动 rebase
    AlphaTr
        4
    AlphaTr  
       2019-03-06 09:14:36 +08:00
    或者默认 git pull 加上 --ff-only 这个参数,只进行 fast-forward 合并
    xqin
        5
    xqin  
       2019-03-06 09:15:00 +08:00   ❤️ 1
    git config --global pull.rebase true

    配置一下 git 的默认行为, 改变 pull 之后的 merge 为 rebase, 这样当你执行 git pull 的时候, 其实是执行的 git fetch && git rebase origin/xxx

    google 关键字`git config pull rebase`
    liujan
        6
    liujan  
       2019-03-06 09:15:03 +08:00   ❤️ 2
    用 git pull --rebase
    terence4444
        7
    terence4444  
       2019-03-06 09:16:57 +08:00 via iPad
    git fetch
    git rebase
    lepig
        8
    lepig  
    OP
       2019-03-06 09:58:21 +08:00
    @AlphaTr fetch 貌似可以。 但是还需要手动。 可能需要适应下
    jaysun
        9
    jaysun  
       2019-03-06 10:03:10 +08:00   ❤️ 1
    你截的图就说明了终止提交的方法,一个空的消息,终止这次提交
    raysonx
        10
    raysonx  
       2019-03-06 10:09:08 +08:00 via Android
    我都是先 git pull,出现合并的话再执行 git reset --hard origin/master
    leo108
        11
    leo108  
       2019-03-06 10:15:36 +08:00
    @raysonx 然后你 自己的代码就『丢』了(除非你会用 reflog )
    graysheeep
        12
    graysheeep  
       2019-03-06 10:20:33 +08:00
    git pull --rebase
    PazuLee
        13
    PazuLee  
       2019-03-06 10:39:49 +08:00
    #7 正解
    lepig
        14
    lepig  
    OP
       2019-03-06 10:59:01 +08:00
    @leo108
    @xqin
    感谢 2 位老铁。 确实可以了
    Lax
        15
    Lax  
       2019-03-06 10:59:15 +08:00
    9 楼正解,删掉这个文件里的内容即可。
    lepig
        16
    lepig  
    OP
       2019-03-06 11:00:52 +08:00
    @jaysun
    @Lax

    Thx
    hiveex
        17
    hiveex  
       2019-03-06 11:23:37 +08:00
    idea 有个选项是 rebase
    anyforever
        18
    anyforever  
       2019-03-06 11:26:36 +08:00
    为什么不在自己的独立分支上开发?
    raysonx
        19
    raysonx  
       2019-03-06 11:34:21 +08:00 via Android
    @leo108 我自己的代码从来不放在 master 分支,如果临时需要 rebase 通常就是先 git fetch origin,然后 git rebase origin/master。
    如果我切到 master 肯定只是为了 pull,然后开新分支做开发。
    xiaoxinxiaobai
        20
    xiaoxinxiaobai  
       2019-03-06 11:48:18 +08:00 via Android
    不太懂这种需求的意义。。。
    rizon
        21
    rizon  
       2019-03-06 11:54:24 +08:00
    我没弄错的话,git pull 之后 产生了 merge 的 commit 记录后,还是可以继续“变基”消除多余的 merge 的

    “拉”和“变基”的顺序是没关系的吧??
    rizon
        22
    rizon  
       2019-03-06 11:59:02 +08:00
    就是既可以执行 `git pull --rebase` 也可以执行 `git pull ` merge 之后再`git rebase`

    两种都可以的。
    idea 默认没有`git pull --rebase` ,不知道为啥。。
    所以每次都是先 commit 代码,然后 执行 `update project`然后发现产生了 merge,然后再手动 `git rebase`。

    如果不这样,那就只能手动去点菜单 vcs -> git -> rebase 这样操作感觉太麻烦了。

    ----

    因此对于 idea 中如何去做这件事,有大佬知道什么更优雅的方式吗? 除了`git config pull.rebase true`这种方案之外的
    FrankFang128
        23
    FrankFang128  
       2019-03-06 12:36:39 +08:00
    rebase 跟自动合并有多大区别? 代码最终都是一样的,该冲突还是冲突。
    widdy
        24
    widdy  
       2019-03-06 12:37:32 +08:00
    @rizon 设置 Git 有个 update method , 可以改成 rebase,可以试试。
    shenyangno1
        25
    shenyangno1  
       2019-03-06 12:50:57 +08:00 via iPhone
    pull 出 merge 日志之后再 rebase 效果一样的吧,有代码冲突除外
    lepig
        26
    lepig  
    OP
       2019-03-06 13:32:30 +08:00
    @anyforever 正常来说应该是在自己分支上弄。但是为了懒吧,需要经常和前端联调代码。每次都要切过去在合,在提交,然后在切自己分支挺麻烦的。
    lepig
        27
    lepig  
    OP
       2019-03-06 13:34:50 +08:00
    @shenyangno1 merge 以后 在我这里就会自动产生一次 commit 了。 不想要这个 commit
    rizon
        28
    rizon  
       2019-03-06 15:16:14 +08:00   ❤️ 1
    @lepig #27 前面我都说了,merge 后执行 rebase 一样的。。。。都会清理时间线(消除 merge 的 commit )的。。
    rizon
        29
    rizon  
       2019-03-06 15:18:09 +08:00
    @widdy #24 嗯 刚看了下,是这样了,都忘了这个选项了,可选采用 rebase 或 merge 来 update
    lepig
        30
    lepig  
    OP
       2019-03-06 16:37:44 +08:00
    确实是。 刚试了一下,执行了 git rebase 后,自动消除了 merge 的日志
    lepig
        31
    lepig  
    OP
       2019-03-06 16:39:25 +08:00
    @rizon 确实是。谢谢了。我总以为产生的 merge 的 commit 会被保留在历史时间线中。哎,人丑真的要多读书。
    lepig
        32
    lepig  
    OP
       2019-03-06 16:39:55 +08:00
    @shenyangno1 确实是。 刚试了一下,执行了 git rebase 后,自动消除了 merge 的日志
    ydirel
        33
    ydirel  
       2019-03-07 00:52:55 +08:00   ❤️ 1
    git fetch && git rebase,,,有冲突手动解决冲突,,,git rebase --continue
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1092 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.