git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
lepig
V2EX  ›  git

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

  •  
  •   lepig · Mar 6, 2019 · 12780 views
    This topic created in 2669 days ago, the information mentioned may be changed or developed.

    问题

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

    git pull

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

    期望

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

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

    谢谢大家

    Supplement 1  ·  Mar 6, 2019

    感谢楼下大佬们的方法。

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

    git config --global pull.rebase true
    

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

    qing0304
        1
    qing0304  
       Mar 6, 2019
    建分支?
    AlphaTr
        2
    AlphaTr  
       Mar 6, 2019   ❤️ 1
    git fetch
    leo108
        3
    leo108  
       Mar 6, 2019   ❤️ 4
    git config --global pull.rebase true

    然后之后所有的 pull 操作都会自动 rebase
    AlphaTr
        4
    AlphaTr  
       Mar 6, 2019
    或者默认 git pull 加上 --ff-only 这个参数,只进行 fast-forward 合并
    O3YwA1ENkb7i35XJ
        5
    O3YwA1ENkb7i35XJ  
       Mar 6, 2019   ❤️ 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  
       Mar 6, 2019   ❤️ 2
    用 git pull --rebase
    terence4444
        7
    terence4444  
       Mar 6, 2019 via iPad
    git fetch
    git rebase
    lepig
        8
    lepig  
    OP
       Mar 6, 2019
    @AlphaTr fetch 貌似可以。 但是还需要手动。 可能需要适应下
    jaysun
        9
    jaysun  
       Mar 6, 2019   ❤️ 1
    你截的图就说明了终止提交的方法,一个空的消息,终止这次提交
    raysonx
        10
    raysonx  
       Mar 6, 2019 via Android
    我都是先 git pull,出现合并的话再执行 git reset --hard origin/master
    leo108
        11
    leo108  
       Mar 6, 2019
    @raysonx 然后你 自己的代码就『丢』了(除非你会用 reflog )
    graysheeep
        12
    graysheeep  
       Mar 6, 2019
    git pull --rebase
    PazuLee
        13
    PazuLee  
       Mar 6, 2019
    #7 正解
    lepig
        14
    lepig  
    OP
       Mar 6, 2019
    @leo108
    @xqin
    感谢 2 位老铁。 确实可以了
    Lax
        15
    Lax  
       Mar 6, 2019
    9 楼正解,删掉这个文件里的内容即可。
    lepig
        16
    lepig  
    OP
       Mar 6, 2019
    @jaysun
    @Lax

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

    “拉”和“变基”的顺序是没关系的吧??
    rizon
        22
    rizon  
       Mar 6, 2019
    就是既可以执行 `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  
       Mar 6, 2019
    rebase 跟自动合并有多大区别? 代码最终都是一样的,该冲突还是冲突。
    widdy
        24
    widdy  
       Mar 6, 2019
    @rizon 设置 Git 有个 update method , 可以改成 rebase,可以试试。
    shenyangno1
        25
    shenyangno1  
       Mar 6, 2019 via iPhone
    pull 出 merge 日志之后再 rebase 效果一样的吧,有代码冲突除外
    lepig
        26
    lepig  
    OP
       Mar 6, 2019
    @anyforever 正常来说应该是在自己分支上弄。但是为了懒吧,需要经常和前端联调代码。每次都要切过去在合,在提交,然后在切自己分支挺麻烦的。
    lepig
        27
    lepig  
    OP
       Mar 6, 2019
    @shenyangno1 merge 以后 在我这里就会自动产生一次 commit 了。 不想要这个 commit
    rizon
        28
    rizon  
       Mar 6, 2019   ❤️ 1
    @lepig #27 前面我都说了,merge 后执行 rebase 一样的。。。。都会清理时间线(消除 merge 的 commit )的。。
    rizon
        29
    rizon  
       Mar 6, 2019
    @widdy #24 嗯 刚看了下,是这样了,都忘了这个选项了,可选采用 rebase 或 merge 来 update
    lepig
        30
    lepig  
    OP
       Mar 6, 2019
    确实是。 刚试了一下,执行了 git rebase 后,自动消除了 merge 的日志
    lepig
        31
    lepig  
    OP
       Mar 6, 2019
    @rizon 确实是。谢谢了。我总以为产生的 merge 的 commit 会被保留在历史时间线中。哎,人丑真的要多读书。
    lepig
        32
    lepig  
    OP
       Mar 6, 2019
    @shenyangno1 确实是。 刚试了一下,执行了 git rebase 后,自动消除了 merge 的日志
    ydirel
        33
    ydirel  
       Mar 7, 2019   ❤️ 1
    git fetch && git rebase,,,有冲突手动解决冲突,,,git rebase --continue
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   901 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.