Git 快速解决方案

基础

Git 快速解决方案

🚀 常见问题快速解决

问题 1: 遇到冲突怎么办?

快速解决步骤:

# 1. 查看冲突文件
git status
 
# 2. 打开冲突文件,找到冲突标记
# <<<<<<< HEAD
# 你的代码
# =======
# 服务器代码
# >>>>>>> origin/main
 
# 3. 手动解决冲突(删除标记,保留最终代码)
 
# 4. 标记为已解决
git add <>
 
# 5. 完成合并
git commit

记住:删除所有冲突标记!


问题 2: 如何判断冲突中哪个是我的代码?

判断方法:

  • 左边(HEAD):你当前分支的代码(可能是你之前写的)
  • 右边(Incoming):服务器上的代码(别人提交的)

快速判断:

  • 看代码内容,哪个是你认识的、你写的
  • 看分支名称:>>>>>>> origin/main 表示服务器上的

问题 3: 暂存区有文件不想提交怎么办?

解决方法:

# 从暂存区移除单个文件(保留工作区修改)
git reset <>
 
# 从暂存区移除多个文件
git reset <文件1> <文件2>
 
# 清空整个暂存区
git reset

结果: 文件回到工作区,可以继续修改


问题 4: Pull 后如何让本地代码变为最新?

标准流程:

# 1. 提交本地修改(如果有)
git add .
git commit -m "Local changes"
 
# 2. Pull 服务器代码
git pull
 
# 3. 如果有冲突,解决冲突
# 编辑冲突文件
# git add .
# git commit
 
# 4. 确认
git status

如果没有冲突: 工作区自动更新为最新版本


问题 5: 不 Pull 直接提交会怎样?

可能的结果:

  1. 服务器没有更新:✅ 可以成功,但本地可能不是最新的
  2. 服务器有更新(不同文件):⚠️ 可能成功,但本地和服务器不同步
  3. 服务器有更新(同一文件):❌ 推送被拒绝,必须先 pull

最佳实践: 总是先 Pull,再 Push!


问题 6: Commit 时包含哪些文件?

答案:只提交暂存区的文件!

git status
# 绿色(Changes to be committed)= 会被提交
# 红色(Changes not staged)= 不会被提交

记住:

  • ✅ 绿色 = 会被提交(暂存区)
  • ❌ 红色 = 不会被提交(工作区)

问题 7: 如何删除已提交到远程的文件?

方法 1: 正常删除(推荐)

# 删除文件
git rm unwanted_file.txt
 
# 提交删除
git commit -m "Remove file"
 
# 推送到远程
git push

结果: 文件从当前版本删除,但仍在历史中

方法 2: 从历史中删除(危险)

# 使用 git filter-repo
git filter-repo --path unwanted_file.txt --invert-paths
 
# 强制推送
git push --force --all

警告: 会重写历史,非常危险!


问题 8: 强制推送什么时候用?

使用场景:

  • ✅ 修正错误的提交信息(个人分支)
  • ✅ 清理提交历史(个人分支)
  • 永远不要在主分支使用!

安全方式:

# 使用 --force-with-lease 而不是 --force
git push --force-with-lease

📋 常用命令速查

基本操作

# 查看状态
git status
 
# 添加文件
git add <>
git add .              # 添加所有文件
 
# 提交
git commit -m "消息"
 
# 推送
git push origin main
 
# 拉取
git pull

冲突解决

# 查看冲突
git status
 
# 解决冲突后
git add <>
git commit
 
# 放弃合并
git merge --abort

暂存区操作

# 从暂存区移除
git reset <>
 
# 清空暂存区
git reset
 
# 查看暂存区内容
git diff --staged

🎯 最佳实践

日常工作流程

# 1. 开始工作前
git pull                    # 拉取最新代码
 
# 2. 开发过程中
# 修改代码...
git add .
git commit -m "Update"
 
# 3. 推送前
git pull                    # 再次拉取(确保最新)
 
# 4. 推送
git push origin main

冲突预防

  • ✅ 频繁拉取和推送
  • ✅ 小步提交
  • ✅ 使用分支开发
  • ✅ 团队沟通和分工

💡 关键理解

Commit vs Push

  • Commit = 保存到本地(你的电脑)
  • Push = 上传到服务器(其他人可以看到)

暂存区 vs 工作区

  • 暂存区 = 快照(照片),不会自动更新
  • 工作区 = 当前编辑的文件
  • git add = 将工作区内容复制到暂存区

冲突解决

  • Pull 前:冲突可能只在暂存区
  • Pull 后:Git 会清空暂存区,在工作区显示冲突标记
  • 解决后:重新添加到暂存区,然后提交

🚨 常见错误

错误 1: 忘记删除冲突标记

# ❌ 错误
<<<<<<< HEAD
name = "Alice"
=======
username = "Alice"
>>>>>>> origin/main
 
# ✅ 正确
username = "Alice"

错误 2: 只解决了一部分冲突

# 有多个文件冲突
git status
 
# ❌ 错误:只解决了1个
git add app.py
git commit  # 会失败!
 
# ✅ 正确:解决所有冲突
git add app.py utils.py config.py
git commit

错误 3: 强制推送主分支

# ❌ 危险!
git push --force origin main  # 会覆盖别人的代码
 
# ✅ 正确
git push --force-with-lease  # 更安全
# 或只在个人分支使用

📚 深入学习


记住:Git 的核心是理解工作区、暂存区、本地仓库和远程仓库的关系!