Git拉取代码时如何临时忽略本地未追踪文件?
这个问题我之前也碰到过!核心原因是你本地的未追踪文件XXXX和服务器最新提交里的同名文件撞了,Git怕直接覆盖你的本地文件才 abort 操作。给你几个靠谱的解决方案,按需选:
解决方案1:临时转移未追踪文件(最直观)
- 先把本地的
XXXX文件移到Git仓库外面的目录(比如桌面),让Git暂时检测不到它 - 执行
git pull,这时候就能顺利拉取服务器的最新代码了 - 拉完之后把刚才移走的文件放回仓库:
- 如果服务器上的
XXXX和你本地的内容不一样,你可以手动对比合并内容 - 如果只是单纯文件名冲突,你可以考虑重命名本地文件,或者决定保留哪一个版本
- 如果服务器上的
解决方案2:用stash暂存所有变更(包括未追踪文件)
如果你不想手动搬文件,用Git的stash功能可以一键暂存所有未提交的变更(包括未追踪文件):
- 执行
git stash -u(-u是关键参数,它会把未追踪的文件也一起暂存起来,默认stash只处理已追踪的修改) - 接着执行
git pull拉取最新代码 - 最后执行
git stash pop,把暂存的内容恢复回来。这时候如果服务器文件和你暂存的文件有冲突,Git会明确标出冲突位置,你可以手动解决后再提交
解决方案3:先fetch再手动merge(更可控)
如果你想先看清服务器的变更再合并,避免盲目pull,可以分两步操作:
- 先执行
git fetch origin,把服务器的最新代码拉到本地的远程分支(比如origin/main),这一步完全不会影响你的本地工作区 - 执行
git diff origin/main,查看服务器代码和你本地代码的差异,提前预判可能的冲突点 - 最后执行
git merge origin/main,这时候不管是已追踪文件的内容冲突,还是未追踪文件的文件名冲突,Git都会明确提示你,你可以针对性处理
额外提醒:如果之后你确定要把本地的XXXX纳入版本管理,拉完代码后记得执行git add XXXX和git commit提交;如果不想让Git再管这个文件,就把它加入.gitignore,以后就不会再出现类似的冲突提示了。
内容的提问来源于stack exchange,提问作者msb
相关产品推荐
相关产品推荐

