本地修改被拒绝,无法切换分支
在开发过程中,你正准备切换到主分支拉取最新代码,结果终端弹出提示:error: Your local changes would be overwritten by checkout。这是因为当前分支有未提交的修改,Git 不允许直接切换。
解决方法有两个。如果这些改动不重要,可以直接丢弃:
git checkout .这会清除工作区所有修改。如果改动需要保留,但又不能立刻提交,可以“暂存”起来:git stash切换完分支后,再用 git stash pop 恢复即可。误删分支还能找回吗
手滑执行了 git branch -D feature/login,发现这个分支还没合进主干。别慌,Git 的引用记录通常还留着线索。
先查看操作日志:
git reflog找到被删分支最后一次提交的哈希值,比如看到 abc1234 drop feature/login。接着用它重建分支:git branch feature/login abc1234分支就回来了,和没删一样。提交到了错误的分支怎么办
本该在 develop 分支干活,结果一通写完才发现还在 main 上提交了三次。这时候不要硬改,可以用 cherry-pick 补救。
先切回正确分支:
git checkout develop然后把那三个提交依次搬过来:git cherry-pick <commit-hash>搬完后回到 main 分支,用 reset 回退:git checkout main
git reset --hard HEAD~3注意,如果代码已经推送到远程,重置后需要强制推送:git push --force-with-lease,但仅限于你个人分支,团队共用分支千万别这么干。合并冲突怎么处理更高效
多人协作时,两个开发者改了同一个文件的同一行,合并时就会报冲突。Git 会在文件中标记出冲突区域:
<<<<<<< HEAD
console.log('main branch');
======
console.log('feature branch');
>>>>>>> feature/login这时候得人工决定保留哪边,或者融合两者。编辑文件,删掉标记符号,改成你想要的样子,保存后执行:
git add .
git commitGit 会自动生成合并提交,冲突就算解决了。远程推送被拒绝
敲下 git push 后提示 rejected, non-fast-forward。通常是别人先你一步推了代码,远程历史和你的本地不一致。
正确的做法是先拉取更新:
git pull --rebase使用 --rebase 能让本地提交“挪”到最新提交之后,避免产生多余的合并节点。如果有冲突,按上面的方法解决后继续:git rebase --continue最后再推送就没问题了。配置错了用户名邮箱
某天突然发现提交记录里名字写成了“zhangsan@company”,而你叫李四。虽然不影响功能,但在团队仓库里显得不专业。
全局修改(影响所有项目):
git config --global user.name "李四"
git config --global user.email "lisix@example.com"如果只想改当前项目,去掉 --global 即可。注意,这不会修改历史提交,要修正旧记录得用复杂操作,一般建议从现在开始对就行。