V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
itechnology
V2EX  ›  程序员

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

  •  
  •   itechnology · 69 天前 · 3386 次点击
    这是一个创建于 69 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    十人以下的考虑 Github flow?

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

    你要知道,git 的冲突是你一定会遇到的,一定要面对的,一定要会解的,而不是说想办法不要有冲突,如果你那样想那就错了。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4171 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:44 · PVG 11:44 · LAX 20:44 · JFK 23:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.