github分支
文章目录
0.为什么要使用分支
分支相当于项目的独立副本,类似于平行宇宙的概念。其主要意义在于,可以在开发分支上进行实验和修改,即便这些尝试尚未成熟,也不会对主分支的稳定性造成影响。一旦修改完成且经过验证成熟后,便可以将其合并到主分支上。通过这种在开发分支上进行开发、测试、验证,再合并到主分支的工作流程,确保了主分支的稳定性和可靠性,同时提高了团队协作的效率。
1.分支的常见命令
列出分支
Git 提供了多种方式来列出分支。命令以 git branch
开头,可以通过添加不同的标志来调整或过滤显示的数据。
列出本地分支
git branch
这个命令会列出所有本地分支。
列出本地和远程分支
git branch -a
这个命令会列出所有本地和远程分支。
按最近提交日期排序列出分支
git branch --sort=-committerdate
这个命令会按最近的提交日期排序列出分支。
列出已经合并到主分支的分支
git branch --merged main
这个命令会列出已经合并到 main
分支的所有分支。
列出尚未合并的分支
git branch --no-merged
这个命令会列出尚未合并到当前分支的分支。
列出分支及其上游和最后的提交信息
git branch -vv
这个命令会列出分支及其上游分支和最后一次提交的信息。
查看当前分支
git branch --show-current
这个命令会显示你当前所在的分支名称。
查看分支的详细信息
git show-branch
这个命令会显示所有分支的提交历史,方便你了解分支间的差异。
查看特定分支的提交日志
git log branch-name
这个命令会显示特定分支的提交日志。
创建分支
Git 提供了几种不同的方法来创建分支。
创建一个新分支并切换到该分支
git branch new-branch
git checkout new-branch
上述命令先创建一个名为 new-branch
的新分支,然后切换到该分支。
创建一个新分支并立即切换到该分支
git checkout -b new-branch
这个命令会创建一个名为 new-branch
的新分支并立即切换到该分支。
使用新的 switch -c
命令来创建和切换分支
git switch -c new-branch
这个命令与 git checkout -b
类似,会创建并切换到一个名为 new-branch
的新分支。
重命名分支
有时你可能需要重命名一个分支,可以使用 -m
标志来完成。
git branch -m old-branch new-branch
这个命令会将 old-branch
分支重命名为 new-branch
。
切换分支
你可以使用 git checkout
或新的 git switch
命令来切换分支。以下命令作用相同。
使用 checkout
切换分支
git checkout existing-branch
使用 switch
切换分支
git switch existing-branch
切换到上一个分支
通过传递 -
给 git checkout
,可以自动切换到之前所在的分支。
git checkout -
删除分支
根据分支的类型,可以使用不同的方法删除分支。
删除本地分支
git branch -d existing-branch
这个命令会删除本地的 existing-branch
分支。
强制删除本地未合并的分支
git branch -D existing-branch
这个命令会强制删除一个未合并到当前分支的本地分支。
删除远程分支
git push origin --delete branch-name
这个命令会删除远程仓库中的指定分支。
删除已经合并的分支
以下命令会列出已经合并到 main
分支(排除 main
分支本身)的分支并删除这些分支。
git branch --merged main | grep -v "main" | xargs -n 1 git branch -d
删除陈旧的跟踪分支
有时你本地有些分支在 GitHub 或其他远程仓库中已经不再跟踪。prune
命令可以帮助你识别并删除这些分支。使用 --dry-run
选项可以预览命令执行的结果。
git remote prune origin --dry-run
git remote prune origin
分支合并命令
合并分支
git merge branch-name
这个命令会将指定的分支合并到当前分支。
取消合并
如果你在合并过程中遇到冲突并决定取消合并,可以使用以下命令:
git merge --abort
这个命令会取消当前的合并操作,恢复到合并前的状态。
分支同步命令
拉取最新的远程分支信息
git fetch origin
这个命令会从远程仓库获取最新的分支信息,但不会自动合并。
拉取并合并远程分支
git pull origin branch-name
这个命令会从远程仓库拉取指定分支的最新提交,并自动合并到当前分支。
分支跟踪命令
设置上游分支
git branch --set-upstream-to=origin/branch-name
这个命令会为当前分支设置上游分支,使其跟踪远程分支。
取消跟踪上游分支
git branch --unset-upstream
这个命令会取消当前分支的上游分支设置。
分支比较命令
比较两个分支的差异
git diff branch1..branch2
这个命令会显示两个分支之间的差异。
临时分支命令
创建并切换到一个临时分支
git switch -c temp-branch
这个命令会创建一个名为 temp-branch
的临时分支并切换到该分支。
删除临时分支
git branch -d temp-branch
这个命令会删除名为 temp-branch
的本地分支。
示例:完整的分支操作流程
以下是一个完整的分支操作流程示例,从创建分支到合并并删除分支:
-
创建并切换到新分支:
git checkout -b feature-branch
-
进行一些更改并提交:
git add . git commit -m "Add new feature"
-
切换回主分支:
git checkout main
-
合并新分支:
git merge feature-branch
-
删除已合并的分支:
git branch -d feature-branch
-
推送更改到远程仓库:
git push origin main
2.分支合并冲突的解决
场景描述
假设你有一个项目,包含两个文件 file1.txt
和 file2.txt
。你有两个分支:main
和 feature-branch
。在这两个分支中,你对这两个文件进行了不同的修改,现在你要将 feature-branch
合并到 main
中。
文件内容
在 main
分支中的 file1.txt
Hello from the main branch in file1.
在 feature-branch
分支中的 file1.txt
Hello from the feature branch in file1.
在 main
分支中的 file2.txt
Hello from the main branch in file2.
在 feature-branch
分支中的 file2.txt
Hello from the feature branch in file2.
合并操作
-
切换到
main
分支并开始合并:git checkout main git merge feature-branch
-
合并时出现冲突: Git 会提示有冲突:
Auto-merging file2.txt CONFLICT (content): Merge conflict in file2.txt Auto-merging file1.txt CONFLICT (content): Merge conflict in file1.txt Automatic merge failed; fix conflicts and then commit the result.
-
查看冲突状态:
git status
输出如下:
On branch main You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: file1.txt both modified: file2.txt
-
打开
file1.txt
解决冲突: 打开file1.txt
,你会看到以下内容:<<<<<<< HEAD Hello from the main branch in file1. ======= Hello from the feature branch in file1. >>>>>>> feature-branch
你需要手动解决冲突。比如结合两个分支的内容,可以这样编辑:
Hello from the main branch in file1. Hello from the feature branch in file1.
-
打开
file2.txt
解决冲突: 打开file2.txt
,你会看到以下内容:<<<<<<< HEAD Hello from the main branch in file2. ======= Hello from the feature branch in file2. >>>>>>> feature-branch
你也需要手动解决冲突。比如结合两个分支的内容,可以这样编辑:
Hello from the main branch in file2. Hello from the feature branch in file2.
-
标记冲突已解决: 解决完冲突后,使用
git add
命令将已解决冲突的文件标记为已解决:git add file1.txt git add file2.txt
-
提交合并: 所有冲突解决并标记完成后,使用
git commit
提交合并:git commit -m "Merge feature-branch into main, resolve conflicts in file1.txt and file2.txt"
-
推送到远程仓库:
git push origin main