git常见问题
1.git没有add文件,但git pull时发生了合并,(可能产生代码冲突,也可能只产生了合并)如何解决?
你没有
git add 文件但 git pull 时发生合并,是因为本地工作区有未提交的修改(修改了文件,但没暂存也没提交),而远程仓库的更改与你的本地修改在同一个文件的同一部分产生了冲突,Git为了不丢失你的本地工作,就尝试自动合并,但因冲突而暂停,要求你手动解决,或先 stash 掉本地修改。核心原因
- 本地有未处理的修改: 你修改了某个文件,但只是在工作区(工作目录),没有
git add到暂存区,更没有git commit。 - 远程有对应修改: 别人提交了远程代码,并且这个改动与你本地修改的文件是同一个文件,甚至同一行。
git pull默认行为:git pull默认做两件事:git fetch(拉取) 和git merge(合并)。它拉取了远程更新,并尝试合并到你的本地分支。- 发生冲突: 由于本地和远程的修改冲突,Git 无法自动完成合并,于是进入合并状态,提示你解决冲突。
解决步骤
- 检查本地状态:
(会看到有 modified: <文件名>,但没有 staged)
git status - 选择处理方式:
- 保留本地修改,解决冲突:
git stash# 将本地修改暂时藏起来git pull# 正常拉取远程git stash pop# 恢复本地修改,进入合并冲突状态- 手动解决冲突文件中的
<<<<<<<,=======,>>>>>>>标记。 - 解决后
git add <冲突文件>,git commit。
- 放弃本地修改,保留远程(拉取最新版本):
然后再
git checkout -- <文件名> # 丢弃某个文件的本地修改 # 或者 git reset --hard HEAD # 丢弃所有本地修改,慎用! [2, 5]git pull。
- 保留本地修改,解决冲突:
- 简而言之:你的本地工作区里的修改与远程拉下来的修改“撞车”了,Git 不敢替你决定保留哪个,所以停下来让你做主
当然,还有一种简便方法,但一定要保证没有其他人在本次操作前有其他提交更新。此方法慎用,概不负责生产中复杂因素导致的问题。
先git log获取提交历史,然后git reset --hard [你提交前的那个commit id],再重新git add和git commit及git push --force
浙公网安备 33010602011771号