Git 分支管理与冲突解决实用指南
分支操作基础
创建新本地分支:
git branch feature-login
查看当前所有本地分支,带 * 的为当前所在分支:
git branch
列出所有远程和本地分支(含远程):
git branch -a
切换至指定分支:
git checkout feature-login
删除已合并的本地分支:
git branch -d feature-login
删除远程分支:
git push origin :feature-login
追踪远程分支
当远程存在新分支但本地未创建时,可使用以下命令自动建立并关联:
git checkout --track origin/feature-login
若本地新建分支需推送到远程并建立跟踪关系:
git push --set-upstream origin feature-login
合并功能分支到主干
先切换到主分支,拉取最新代码:
git checkout main
git pull origin main
将开发分支内容合并至主分支:
git merge feature-login
检查合并状态:
git status
暂存工作进度:git stash
临时保存当前修改,以便切换分支处理紧急任务:
git stash save "WIP: login page draft"
查看所有暂存记录:
git stash list
恢复最近一次暂存的内容:
git stash apply stash@{0}
删除特定暂存条目:
git stash drop stash@{0}
清空全部暂存记录:
git stash clear
解决合并冲突:使用图形化工具
配置默认合并工具(以 Meld 为例):
git config merge.tool meld
git config merge.conflictstyle diff3
git config mergetool.prompt false
git config mergetool.meld.path "C:\\Program Files (x86)\\Meld\\Meld.exe"
启动合并工具:
git mergetool
查看支持的合并工具列表:
git mergetool --tool-help
文件差异对比详解
查看工作区与上一次提交之间的差异(未暂存文件):
git diff
查看暂存区与上次提交之间的差异(已 add 但未 commit):
git diff --staged
查看工作区与暂存区、以及与上次提交的所有变更:
git diff HEAD
查看最近 N 次提交前后的差异:
git diff HEAD~3
比较两个分支最后提交的差异:
git diff main feature-login
仅显示差异文件列表:
git diff main feature-login --stat
查看指定文件在两分支间的具体变更:
git diff main feature-login src/login.js
日志分析:定位分支差异
查找仅在 feature-login 中存在的提交:
git log feature-login ^main
查看 feature-login 相比 main 多出的提交:
git log main..feature-login
获取两个分支间所有不同的提交(不区分谁多谁少):
git log feature-login...main
同时显示每个提交所属分支:
git log --left-right feature-login...main
diff 输出格式解析
示例输出说明:
diff --git a/demo.txt b/demo.txt
index 0df0bb6..41c9d5a 100644
--- a/demo.txt
+++ b/demo.txt
@@ -1 +1,2 @@
-Init
+Init
+change by local dev1
--- a/xxx表示原始文件+++ b/xxx表示目标文件@@ -1 +1,2 @@表示变动范围:原文件第1行,新文件从第1行开始共2行-表示被移除的行+表示新增的行
自动合并失败的修复策略
错误提示:Automatic merge failed; fix conflicts and then commit the result.
原因:git pull 在拉取后尝试自动合并,但发生冲突。
解决方案:
git fetch --all
git reset --hard origin/main
git stash apply
git commit -am "Fix merge conflict and continue"
git pull
清理未跟踪的临时文件:
git clean -f -d