Git 从远程拉取后发现需要自动合并!如何取消自动合并 - V2EX
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 12270 次点击
    这是一个创建于 2418 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

    多人开发,每天早上拉一次新代码,然后进行任务开发。但是如果在我 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 合并
    O3YwA1ENkb7i35XJ
        5
    O3YwA1ENkb7i35XJ  
       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     Solana     2812 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 06:31 PVG 14:31 LAX 23:31 JFK 02:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86