• home > tools > versionControl > git >

    git本地分支与远程分支不同步pull push操作失败,代码冲突

    Author:zhoulujun Date:

    HEAD代表本地最近成功push后形成的引用。MERGE-HEAD表示成功pull后形成的引用。git代码提交的常见错误整理,一般都是本地分支与远程分支,代码冲突,没有关联等造成。本文针对git pull push 命令出错提供一些解决办法参考。

    代码库迁移,代码添加新库远程地址,或者本地添加新的分支,本地分支没有推送到远程库。或者本地代码与远程代码存在冲突,都会造成push pull 出错。

    远程分支与本地分支没有关联

    使用git pull  push 的时候就会报错

    There is no tracking information for the current branch.Please specify which branch you want to merge with.

    See git-pull(1) for details

        git pull <remote> <branch>

    If you wish to set tracking information for this branch you can do so with:

        git branch --set-upstream-to=origin/<branch> merged 7xx567x

    是因为本地分支和远程分支没有建立联系 

    使用git命令branch -vv  可以查看本地分支和远程分支的关联关系

    git branch -vv

    根据命令行提示,使用git命令branch --set-upstream-to 关联本地与远程分支联系

    git branch --set-upstream-to=origin/远程分支的名字 本地分支的名字
    git branch --set-upstream-to=origin/master master

    在进行提交,就好了

    远程分支与本地分支代码冲突未合并

    git rebaee git pull 更新远端代码的同时如果与本地代码产生冲突。那么冲突的文件中就出现了需要手动合并的部分

    pull is not possible because you have unmerged files.

    Please, fix them up in the work tree, and then use 'git add/rm <file>'

    as appropriate to mark resolution, or use 'git commit -a'.

    HEAD与MERGE-HEAD

    本地的push和merge会形成MERGE-HEAD(FETCH-HEAD), HEAD(PUSH-HEAD)这样的引用。

    • HEAD代表本地最近成功push后形成的引用

    • MERGE-HEAD表示成功pull后形成的引用

    可以通过MERGE-HEAD或者HEAD来实现类型与svn revet的效果

    git reset –hard FETCH_HEAD

    将本地的冲突文件冲掉,不仅需要reset到MERGE-HEAD或者HEAD,还需要–hard。没有后面的hard,不会冲掉本地工作区。只会冲掉stage区。

    git pull --rebase

    git pull --rebase不同的地方则是当有这些冲突存在时,git帮我们自动创建了一个新的分支,并且git告诉你接下来你要在这个新的分支上处理这个冲突。

    rebase in progress; onto 24f42c6

    You are currently rebasing branch 'master' on '24f42c6'.

    (fix conflicts and then run "git rebase --continue")

    并且git还告诉我们 fix conflicts and then run "git rebase --continue",意思是解决冲突然后执行git rebase --continue命令,

    其实git rebase --continue的正确操作应该是确认处理好冲突后则将调整好的文件添加到暂存区,并执行git rebase --continue命令告诉git,我已经解决好冲突了,

    并且已经将处理后的文件添加到了暂存区,现在可以将这些文件commit了,

    简单来讲就是正常的解决冲突过程是

    1. git add .

    2. git commit -m "..." 

    3. git push时因为本地仓库代码与远程仓代码有冲突,所以接下来

    4. git pull拉取远程代码,而冲突需要手动解决

    5. 解决好后重新进行git add . git commit -m".." git push

    git pull 这一步如果加上了 --rebase的选项,那么第5步操作将变成如下

    1. git add .

    2. git rebase --continue

    3. git push

    所以git pull --rebase用在合并代码的时候其作用就是在一个随机创建的分支上处理冲突,避免了直接污染原来的分区

    参考文章

     git pull --rebase的理解 https://blog.csdn.net/qican_7/article/details/98870789



    转载本站文章《git本地分支与远程分支不同步pull push操作失败,代码冲突》,
    请注明出处:https://www.zhoulujun.cn/html/tools/VCS/git/8231.html