• Git五个常见问题及解决方法


    一、删除远程仓库上被忽略的文件

    由于种种原因,一些本应该被忽略的文件被我们误操作提交到了远程仓库了。那么我们该怎么删除这些文件呢?

    以误提交了.idea目录为例,我们可以通过下面的步骤处理:

    1)我们首先应该清除暂存区的.idea文件,执行命令

    # -r代表删除的是文件或者文件夹   --cached 只清除暂存区不清除工作区的
    git rm -r --cached .idea
    

    2)在 .gitignore 文件,添加需要忽略的文件。

    .idea
    

    之后在提交,就会删除.idea相关文件

    git commit -m '提交信息'
    git push
    

    git rm 与 git rm --cached 的区别

    git rm : 同时从工作区暂存区删除文件。即本地的文件也被删除了。

    git rm --cached : 从暂存区删除文件。但是本地文件还存在,只是不希望这个文件被版本控制。

    上面的 .idea文件 显然我自己工作区是不能删除的,只能删除暂存区,所以需要加上 --cached

    如图


    二、代码开发一半,有新任务了

    当你正在巴拉巴拉开发某个需求的时候,你只完成了一半。这时,你又接到了另外一个需求,急需进行开发,之前那个需求可以先放一放。你又不想把它 git commit 提交到版本库,也就是说工作区或者暂存区中有一些你并不想提交到版本库的代码。

    这个时候又该怎么办呢?

    你就可以使用 git stash 命令来解决这个问题。

    1. 首先,将工作区暂存区中的修改,存储到堆栈
    # -u 表示还要存储工作区中新增的文件,如果不加u只会存储工作区中已经存在的文件的修改
    git stash save -u "需求 a 只完成了一半"
    

    这样,工作区和暂存区就都干净了。

    我们也可以查看堆栈中的 stash 列表。(由于我们只 git stash 存储了一次,故堆栈中只有一个 stash)

    $ git stash list
    stash@{0}: On main: 需求 a 只完成了一半
    

    也可以查看,stash中存了哪些内容

    git stash show
    

    2) 然后,就可以在当前的 dev 分支中,优先完成需求 b

    如果需求 b 已开发完成,就将其提交到版本库。

    git add .
    git commit -m "需求 b 已完成"
    # 推送到远程的 dev 分支
    git push origin dev
    

    3) 最后,我们将堆栈中的 stash 弹出,应用到当前的工作区

    git stash pop
    

    继续完成需求 a 中未完成的工作。如果需求 a 也完成了,也将其提交到版本库。

    git add .
    git commit -m "需求 a 也完成"
    # 推送到远程的 dev 分支
    git push origin dev
    

    这就大功告成。


    三、git pull代码冲突

    当你提交代码的时候,想先 pull一下代码时你发现

    $ git pull
    error: Your local changes to the following files would be overwritten by merge:
            src/main/java/com/open/demo/beans/AppReqParmVO.java
    Please commit your changes or stash them before you merge.
    Aborting
    

    很明显你本地修改的代码与他人修改提交的有冲突了。文件都告诉你了 AppReqParmVO.java

    如何解决?

    1)先把本地代码存储起来

    git stash
    

    2)然后再去pull远程代码

    $ git pull
    Updating 5b82c67..3d844c3
    Fast-forward
     src/main/java/com/open/demo/beans/AppReqParmVO.java | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    

    发现已经不报错了,能够正常 pull下来。

    3)最后再把本地存储的代码释放出来

    $ git stash pop
    Auto-merging src/main/java/com/open/demo/beans/AppReqParmVO.java
    CONFLICT (content): Merge conflict in src/main/java/com/open/demo/beans/AppReqParmVO.java
    

    释放出来,这里也告诉你有冲突,然后手动解决下冲突,就可以正常提交了。


    四、合并分支发生的冲突

    上面的问题是同一分支,拉取代码引起的冲突,而这里是在两个分支进行合并的时候,出现了冲突。

    比如现在有两个分支,你在dev修改了一个文件后提交成功,而master分支也改了同一个文件也提交成功了,这个时候当你将dev合并到master的时候,你发现合并不了,出现冲突了,这种问题实际开发中也挺常见的。

    这里在dev合并到master发生冲突

    1)、从dev切到master分支

    git checkout master
    

    2)、合并dev

    git merge dev
    

    如果有冲突那么就会告诉你哪些文件冲突

    $ git merge dev
    Auto-merging src/main/java/com/open/demo/beans/AppReqParmVO.java
    CONFLICT (content): Merge conflict in src/main/java/com/open/demo/beans/AppReqParmVO.java
    Automatic merge failed; fix conflicts and then commit the result.
    

    那你只需找到当前冲突文件,解决冲突即可。

    <<<<<<< HEAD
        private final   long serialVersionUID = -1206184202179044275L;
    =======
        private  long serialVersionUID = -1206184202179044275L;
    >>>>>>> dev
    

    修改完重新提交就可以了。


    五、master修改代码,推送到dev

    你在master修改代码,却需要把修改后代码推送到dev远程分支上

    1)、在master上

       git add .
       git commit -m "本次提交说明"
    

    2)、切换到dev分支

    git checkout dev
    

    3)、合并master

    git merge master
    

    4)、推送到主仓库

    git push
    

    如果dev分支提交代码 需要重新 add 和 commit。

    声明: 公众号如需转载该篇文章,那麻烦在文章的头部 声明是转至公众号: 后端元宇宙。尊重作者辛苦劳动果实嘛。同时也可以问本人要该文章markdown原稿和原图片。其它情况一律禁止转载哦!

  • 相关阅读:
    .net获取服务器端路径
    js跳转页面回传值问题处理
    关于服务器文件保存到本地文件的浅谈
    ADO.NET中的五个主要对象
    C# 禁止windows程序重复运行的两种基本方法
    一个更好一点的主线程与子线程之间通信的做法
    Django+Nginx配置过程
    一个简单的模板系统的实现(动态载入DLL)
    我的Notepad++环境配置
    一个去除Aspose.Cells生成的EXCEL2007格式中Evaluation Warning的笨办法
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/15628563.html
Copyright © 2020-2023  润新知