问题: git 冲突
最近在写一个项目,我在公司和家里同时都在修改,有一次两端都修改之后,再git pull 就出现了这样的问题:
error: The following untracked working tree files would be overwritten by merge:
src/components/Footer.js
src/components/Sidebar.js
src/components/home/Tool.js
Please move or remove them before you merge.
其实提示很明确,就是代码冲突,想起来之前处理代码冲突踩过坑,所以记录一下。
代码冲突有两种解决,一个是直接覆盖,一个是合并修改。
直接覆盖 —— 出现游离分支
因为有一端的代码不需要,所以我当时直接强制覆盖了,代码很简单
git reset --hard
但等到真提交代码的时候,出现了问题,
为什么出现的我还不是很明白,但是大致问题是代码保存在一个游离分支上。我又去github项目上看了,果然没有新的分支,那基本上确定就是游离的一个分支没错了。
网上的解决思路大致都是新建一个tem的临时分支,再切换到主分支上merge临时分支,push之后删掉临时分支。
解决步骤:
1 查看在游离状态下提交的最新commit号
git branch -v
2.创建一个临时的分支,创建完成之后切换到该分支上查看一下
git branch temp
3.切换到要合并的主分支(因为只有我一个人用,所以是master,具体要看主分支是哪个)
git checkout master
4.合并
git merge temp
5.推送
git push origin master
或者是 git push origin 分支名称:远程分支名称
6.推送成功后删除临时分支
git branch -d temp
git 大小写不敏感
推送成功之后,我又发现了一个git的小问题,标题忽略大小写。
实际上git对文件内的大小写是敏感的,但是对文件名的大小写是不敏感的。
解决方案和问题:
1.设置全局的git大小写敏感
$ git config core.ignorecase false
问题:
这个在一个人的情况下还好,如果在多人协作的情况下,分支B注意大小写,再切回分支A,分支A会重写分支B的文件。
2.设置全局的git大小写敏感
重命名
git mv oldA newB
重命名oldA为newB
问题:
其实也不是什么问题,主要是千万要先备份,删除任何东西前先备份!
合并修改
再回到合并修改,用到git stash
stash是本地的,不会通过git push命令上传到git server上。会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
git stash
然后可以正常拉取
git pull
如果要恢复缓存
git stash pop
stash是一个缓存栈,后续还可以有各种个样的操作,这里我就一一说明了。