git 的正确使用姿势是怎么样的?和另一个同事修改同一个文件(不同的行)时, git pull 老是失败 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
itechnology
V2EX    程序员

git 的正确使用姿势是怎么样的?和另一个同事修改同一个文件(不同的行)时, git pull 老是失败

  •  
  •   itechnology 2022-04-22 10:33:35 +08:00 5354 次点击
    这是一个创建于 1269 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是写 Java 的,经常在和另一个同事同时修改一个文件,但改的是不同的方法时,如果其中一个人提交了代码,另一个人 git pull 一定会失败

    41 条回复    2022-07-18 21:12:10 +08:00
    ktqFDx9m2Bvfq3y4
        1
    ktqFDx9m2Bvfq3y4  
       2022-04-22 10:34:41 +08:00
    你 Pull 之前没有 Commit 先?
    cmdOptionKana
        2
    cmdOptionKana  
       2022-04-22 10:36:23 +08:00
    先各自开分支?
    Imindzzz
        3
    Imindzzz  
       2022-04-22 10:36:27 +08:00
    贴出具体错误是提问的基本素质
    MoYi123
        4
    MoYi123  
       2022-04-22 10:39:01 +08:00
    这不是失败, 这是让你解决冲突.
    dvsilch
        5
    dvsilch  
       2022-04-22 10:39:52 +08:00
    先把自己的修改 commit/stash 起来,再拉取别人代码

    话说这不是基本的 git 操作吗,一搜就知道了
    Gilgamesh7
        6
    Gilgamesh7  
       2022-04-22 10:42:14 +08:00   1
    pull 失败后,git stash -> git pull -> git stash apply ,有冲突解决一下冲突
    villivateur
        7
    villivateur  
       2022-04-22 10:42:51 +08:00
    如果搞不定 Git 的工作区、暂存区、仓库、远端这些概念,建议用 SVN ,比较简单
    Ev1s
        8
    Ev1s  
       2022-04-22 10:46:24 +08:00
    这是正常的鸭
    enopkf
        9
    enopkf  
       2022-04-22 10:46:32 +08:00
    用 git pull -r 更新,rebase 方式,有冲突解决冲突
    ruanimal
        10
    ruanimal  
       2022-04-22 10:53:32 +08:00
    https://www.liaoxuefeng.com/wiki/896043488029600

    git 也是一种工具,要稍微学下怎么用的
    monkeyWie
        11
    monkeyWie  
       2022-04-22 11:11:02 +08:00   1
    git stash
    git pull
    git stash pop
    quxuanxuan
        12
    quxuanxuan  
       2022-04-22 11:18:20 +08:00
    git reset 到较早的 commit
    git pull
    Junzhou
        13
    Junzhou  
       2022-04-22 11:20:11 +08:00   4
    方案 1:pull 前,先把本地的 commit 了,但是一般不推荐这样做。因为你手头的活可能没做完。
    方案 2:git stash ,先把当前没做完的活 stash 了,然后 pull ,pull 完,你同事的 commit 就合并进去了,这个时候,在把 stash 的内容取出来。
    itechnology
        14
    itechnology  
    OP
       2022-04-22 11:37:26 +08:00
    @Chad0000 没有,我习惯先 pull ,再 commit
    Felldeadbird
        15
    Felldeadbird  
       2022-04-22 11:43:16 +08:00   2
    按理来说,开发时不应该频繁同时修改同一个文件。一般我是开分支来做。管理做合并处理。这样大家都做大家的事情。完成任务后,去合并到主分支。
    fiypig
        16
    fiypig  
       2022-04-22 11:44:42 +08:00
    你先提交 ,然后拉取 ,然后合并提交
    darkengine
        17
    darkengine  
       2022-04-22 11:50:50 +08:00
    @itechnology 先不管有没有冲突,先 pull 后 commit 肯定会报错
    enopkf
        18
    enopkf  
       2022-04-22 11:52:47 +08:00
    我觉得大家说的 git stash 方式更好,但我补充一下先 commit 的方式,也就是 13 楼的方案 1

    1. 先把修改 commit
    2. git pull -r ,rebase 方式更新,这样你的临时 commit 就是最后一个 commit (当然有冲突解决冲突)
    3. git reset HEAD^ 把临时提交取消,之前修改会恢复到工作区
    unco020511
        19
    unco020511  
       2022-04-22 11:56:31 +08:00   1
    1.git stash
    2.git pull --rebase
    3.git stash pop
    ktqFDx9m2Bvfq3y4
        20
    ktqFDx9m2Bvfq3y4  
       2022-04-22 11:58:25 +08:00
    @itechnology
    养成先 Commit 的习惯就行,而且一般情况下你们不应该在同一个分支下工作。如果工作的内容高度依赖,那么要么定期 Merge 对方的分支到自己的里面来,要么就在同一分支下工作:即使这样也是先 Commit 再 Pull ,Commit 就是确保你修改的及时备份,不要动不动给我整没了。

    这两周工作的内容就是与另外一个开发高度重叠,就在同个分支下工作的。只不过这种比较少见迫不得已为之而已。
    unco020511
        21
    unco020511  
       2022-04-22 12:01:24 +08:00
    补充一下,正常来说你一般不和同事在一个分支开发呀,当然如果是两个人开发同一个功能除外
    weichengwu
        22
    weichengwu  
       2022-04-22 12:03:00 +08:00
    看一下 git 入门教程
    itechnology
        23
    itechnology  
    OP
       2022-04-22 12:13:11 +08:00
    @unco020511 我和同事开发同一个页面的不同接口,我们把这些接口都写在同一个文件里面了
    msaionyc
        24
    msaionyc  
       2022-04-22 12:32:13 +08:00 via iPhone
    你先明确一下“一定会失败”是什么意思,不然很难得到你想要的答案
    nothingistrue
        25
    nothingistrue  
       2022-04-22 12:44:19 +08:00
    git 修改同一个文件,不一定总是冲突,但大概率冲突,这要看 git 能否自动将两个人的修改合并成一个。所以尽量避免修改同一个文件。

    如果不能避免,那也不是啥大问题。pull 之后用新提交解决冲突,或者先 rebase 解决冲突再 push ,都可以,但是以上的前提是:**********先提交*********。

    pull 失败跟冲突是两码事,本地工作空间没内容时,pull 只会产生冲突不会失败。本地工作空间有内容,并且预期还会产生冲突(实际上是 Git 无法自动解决冲突),才会 pull 失败。

    使用 Git 时切记,先提交后 pull (如果暂时还不想提交就 stash ),不要像 SVN 那样先更新后提交。如果是想获取线性提交历史,那么使用 pull --rebase 即可,但本地还是要先提交。
    chiu
        26
    chiu  
       2022-04-22 12:56:02 +08:00
    失败的错误信息是什么?
    zamaojava
        27
    zamaojava  
       2022-04-22 13:09:23 +08:00
    idea 应该提示很好啊,从来没打过命令,idea 无脑支持。
    ClericPy
        28
    ClericPy  
       2022-04-22 14:25:07 +08:00
    大项目参考一下 git flow?

    十人以下的考虑 Github flow?

    尽量避免不同的人开发同一个文件 /模块, 是不是底层抽象的不彻底
    dddd1919
        29
    dddd1919  
       2022-04-22 14:32:18 +08:00
    结对编程,一个人改
    zooeymango
        30
    zooeymango  
       2022-04-22 14:35:30 +08:00
    git 对比的是文件的那一行进行了修改, 虽然你觉得你们写的是不一样的代码, 但是对 git 来说你们的改动冲突了
    wolfie
        31
    wolfie  
       2022-04-22 14:40:53 +08:00   2
    这水平还是用 svn 好。
    xcsoft
        32
    xcsoft  
       2022-04-22 14:43:36 +08:00 via iPhone
    出现冲突了吧
    624144061
        33
    624144061  
       2022-04-22 15:08:36 +08:00   4
    都是老实人,我建议 git push -f
    deplivesb
        34
    deplivesb  
       2022-04-22 15:11:36 +08:00   1
    https://learngitbranching.js.org/?locale=zh_CN
    建议你去跟这这个学一学
    CodeCodeStudy
        35
    CodeCodeStudy  
       2022-04-22 15:20:19 +08:00
    你让他不要动
    拆分大文件,每个人负责某个文件不就好了
    callv
        36
    callv      2022-04-22 19:19:12 +08:00 via iPhone
    这种协作用 git flow code review 好些
    mkmoon
        37
    mkmoon  
       2022-04-22 19:23:31 +08:00 via iPhone
    commit 后,也可以先 git fetch ,再在本地 git merge ,最后再 push 就行
    yeqizhang
        38
    yeqizhang  
       2022-04-22 21:06:11 +08:00 via Android
    用 idea 用习惯的我,都是没 commit 先 pull 来合并别人的提交的
    magicls
        39
    magicls  
       2022-04-23 16:42:27 +08:00
    push 之前先 git pull --rebase ,有冲突解冲突,解了再重新 git add; git commit 。

    你要知道,git 的冲突是你一定会遇到的,一定要面对的,一定要会解的,而不是说想办法不要有冲突,如果你那样想那就错了。
    tooya
        40
    tooya  
       2022-07-18 17:34:50 +08:00
    @yeqizhang idea 的 pull 实际上就是做了 git stash 、git pull 、git stash pop 三步
    yeqizhang
        41
    yeqizhang  
       2022-07-18 21:12:10 +08:00 via Android
    @tooya ok ,回头我测一下看一下控制台,记一下笔记。也不知道小乌龟是不是也是如此,我去试试
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2735 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 14:43 PVG 22:43 LAX 07:43 JFK 10:43
    Do have faith in what you're doing.
    ubao 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