解决git 本地代码与远程仓库冲突问题
阅读原文时间:2023年08月09日阅读:3

在使用协同开发难免会出现同时修改某个文件导致代码冲突的问题

     * branch            master     -> FETCH_HEAD
    error: Your local changes to the following files would be overwritten by merge:
            lib/pages/search_page.dart
    Please commit your changes or stash them before you merge.
    Aborting
    Updating 657e136..4f8135c

最简单的就是使用git stash 将自己修改的代码片段进行一个本地仓库的临时缓存

    $ git stash
    Saved working directory and index state WIP on master: 657e136 search page modif                                                                                                                                  ied

使用git stash list 查看缓存代码片段

    $ git stash list
    stash@{0}: WIP on master: 657e136 search page modified

使用了git stash命令将改动的代码缓存后,就可以执行pull 将远程仓库更新到本地了,

现在使用pull 更新代码

    $ git pull origin master

现在更新没问题了

再将我们自己修改的代码合并到更新后的代码中去

    $ git stash pop stash@{0}
    Auto-merging lib/pages/search_page.dart
    CONFLICT (content): Merge conflict in lib/pages/search_page.dart

其中stash@{0} 就是git stash时的一个标记,也可使用git stash save XXX 来定义一个自己标记,方便自己查询管理

现在回到自己写的代码中去,你会发现

很明显git 帮你将远程的和本地的分开标记出来了,现在我们只需要将自己修改过的地方合并到Updated upstream中去再 commit 就ok

其实stash 有点类似这个情景(我们平时写代码,有个同事说哎XX 我提交了一个代码是否你也修改了 XX方法?也是你意识到了直接更新定会出现冲突,咋办! 我们就像将自己修改的文件先拷贝一份呗,然后在将同事提交的代码更新下来,然后再将自己改过的方法合并进去,再提交)。

二、直接还原

有时候我们本地并没有修改多少,使用直接还原也许更省事,

先使用git log 查询一下提交记录

    $ git log
    commit 4f8135c32d508d250b83fe12644c4b65db87a1af (HEAD -> master, origin/master)
    Author: dex <601078218@qq.com>
    Date:   Thu Nov 7 22:19:04 2019 +0800

        the tab_navigator.dart is modified

        ##  ... 省略其他log

直接拷贝 commit版本后的hash码

    $ git reset --hard 4f8135c32d508d250b83fe12644c4b65db87a1af
    HEAD is now at 4f8135c the tab_navigator.dart is modified

ok 代码已经还原到上一次提交状态,但是这个需要谨慎使用,执行还原后你修改的代码将不复存在!