目 录CONTENT

文章目录

git发生冲突解决办法

在水一方
2021-12-06 / 0 评论 / 0 点赞 / 1,180 阅读 / 3,179 字 / 正在检测是否收录...

冲突一:

先看下冲突的提示

$ git pull
error: Your local changes to the following files would be overwritten by merge:
        index.html
        src/request/api.js
**Please commit your changes or stash them before you merge**.
Aborting
Updating 04df72d..1f31193

出现这个问题的原因是其他人修改了index.html和src/request/api.js这两个文件并提交到版本库中去了,而你本地也修改了index.html和src/request/api.js,这时候你进行git pull操作就好出现冲突了,解决方法,在上面的提示中也说的很明确

1)直接commit本地的修改 ----也一般不用这种方法
2)通过git stash ---- 通常用这种方法

git stash
git pull
git stash pop

image.png

可以看到工作目录是干净的了:

$ git status 
# On branch master nothing to commit, working directory clean

通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。

说明:默认情况下,git stash 只会贮藏已 修改和暂存的 已跟踪文件

此时,你可以切换分支并在其他地方工作;你的修改被存储在栈上。 要查看贮藏的东西,可以使用 git stash list:

$ git stash list
stash@{0}: WIP on master: 04df72d Merge remote-tracking branch 'origin/master'

应用选项只会尝试应用贮藏的工作——在堆栈上还有它。 可以运行 git stash drop 加上将要移除的贮藏的名 字来移除它:


ad@LAPTOP-BSNN6G4Q MINGW64 /d/workspace/web/pcep-ems-ei-web (master)
$ git stash list
stash@{0}: WIP on master: 04df72d Merge remote-tracking branch 'origin/master'

ad@LAPTOP-BSNN6G4Q MINGW64 /d/workspace/web/pcep-ems-ei-web (master)
$ git stash drop stash@{0}
Dropped stash@{0} (bcfce37c512bc3528cdc8d987a4c1dd68ff6bf61)

需要说明一点,stash是本地的,不会通过git push命令上传到git server上。

问题一:git stash apply 和 git stash pop的区别

冲突二

在push代码时,遇到这种问题提示

Updates were rejected because the tip of your current branch is behind
于是尝试git pull结果又报错提示:
refusing to merge unrelated histories

解决:
出现这个问题的最主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库。假如我之前是直接clone的方式在本地建立起远程github仓库的克隆本地仓库就不会有这问题了。
查阅了一下资料,发现可以在pull命令后紧接着使用--allow-unrelated-history选项来解决问题(该选项可以合并两个独立启动仓库的历史)。

git pull origin master --allow-unrelated-histories

以上是将远程仓库的文件拉取到本地仓库了,紧接着将本地仓库的提交推送到远程github仓库上,使用的命令是:

git push <远程主机名> <本地分支名>:<远程分支名>
也就是
git push origin master:master
提交成功。

这次出现这个问题,最终我的解决方式是直接重新从远程clone一份到本地然后重新提交,问题虽然解决了,但是有些情况下如果本地修改的东西比较多的话,就不适合直接删本地的代码重新克隆,于是记录一下这个问题产生的原因,而且也是非常有必要

冲突三:

在冲突一的基础上执行git stash pop时出现冲突,因为其中一个文件api.js我自己本地修改了,和git上的不一致,于是找到对应的<<<<<<< Updated upstream到=======之间的代码是你拉取的别人的代码,=======到>>>>>>> Stashed changes是你自己本次修改的代码
。这样有了明确的冲突标记符再修改起来就很方便了。如果需要保留自己的就把<<<<<<< Updated upstream到=======之间的代码删除,如果要保留git上的就把自己的代码=======到>>>>>>> Stashed changes这部分删除即可

冲突部分示例可见图:
image.png

问题:vscode中stage changes这个部分不太理解

场景4

git commit -m 'ceshi' 报错

image.png

这种情况下push
image.png

解决方案:
commit -m 的时候将后面说明的单引号改为双引号 例如:$ git commit -m "测试"

场景五

git clone时报错,见提示
image.png

处理方式:提示信息为SSL认证失败,可以关闭SSL的认证

export GIT_SSL_NO_VERIFY=true
git config --global http.sslVerify "false"

由于页面显示的地址和克隆的地址不一样(是否有带证书),按照脚本配置后就可以正常clone了

场景六

git push的时候报错
提示:! [rejected] feature/messageplat -> feature/messageplat (non-fast-forward)

在 Push到服务器时有时会出现 rejected - non-fast-forward 错误,这是由于远端发生改变,此时再提交之前你需要将远端的改变合并到本地上

拓展部分:

创建一个新的github项目页面展示

…or create a new repository on the command line
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:we2012wuhan/test.git
git push -u origin main

or push an existing repository from the command line
git remote add origin git@github.com:we2012wuhan/test.git
git branch -M main
git push -u origin main

  • 当文件已经通过git add 添加到暂存之后如果想要取消暂存,需要执行命令:git reset HEAD fileName
    也就是这个提示 (use "git reset HEAD ..." to unstage)

这部分意思需要明确一下:
git config --global credential.helper store
git config --system --unset credential.helper

0

评论区