Git 保姆级教程(二):Git 分支

简介: Git 保姆级教程(二):Git 分支

一、分支简介

1.1 git branch name(创建分支)

比如,创建一个 testing 分 支, 你需要使用 git branch 命令:

[root@localhost git_study]# git branch testing

你可以简单地使用 git log 命令查看各个分支当前所指的对象。 提供这一功能的参数是 --decorate

[root@localhost git_study]# git log --oneline --decorate
2abbca3 (HEAD, tag: v1.1, tag: v1.0, testing, mian) belive youself
550e697 --amend 55
03f8d1d basic-2.8(git commit -a)
bb2a7f8 basic-2.7(git commit -m)
bdd3afc (tag: v0.1) basic-2.7(gitcommit)

1.2 git checkout name(分支切换)

要切换到一个已存在的分支,你需要使用 git checkout 命令

[root@localhost git_study]# git checkout testing 
切换到分支 'testing'
[root@localhost git_study]# git log --oneline --decorate
2abbca3 (HEAD -> testing, tag: v1.1, tag: v1.0, mian) belive youself
550e697 --amend 55
03f8d1d basic-2.8(git commit -a)
bb2a7f8 basic-2.7(git commit -m)
bdd3afc (tag: v0.1) basic-2.7(gitcommit)

这样 HEAD 就指向 testing 分支了

你可以简单地使用 git log 命令查看分叉历史。 运行 git log --oneline --decorate --graph --all

$ git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project

二、分支的新建与合并

2.1 git checkout -b name(新建并切换分支)

[root@localhost git_study]# git checkout -b clc
切换到一个新分支 'clc'
[root@localhost git_study]# git log --oneline --decorate
2abbca3 (HEAD -> clc, tag: v1.1, tag: v1.0, testing, mian) belive youself
550e697 --amend 55
03f8d1d basic-2.8(git commit -a)
bb2a7f8 basic-2.7(git commit -m)
bdd3afc (tag: v0.1) basic-2.7(gitcommit)

2.2 git merge name(分支的合并)

你只需要找到你想合并入的分支,然后运行 git merge 命令:

注意:合并只能在旧分支中合并新分支

[root@localhost git_study]# git checkout mian
切换到分支 'mian'
[root@localhost git_study]# cat target.txt 
CET-4 and CET-6
[root@localhost git_study]# git merge clc
更新 2abbca3..939c2db
Fast-forward
 target.txt | 2 ++
 1 file changed, 2 insertions(+)
[root@localhost git_study]# cat target.txt 
CET-4 and CET-6
 
Win the Game

2.3 git branch -d name(删除分支)

1. [root@localhost git_study]# git branch -d testing 
2. 已删除分支 testing(曾为 2abbca3)。

2.4 遇到冲突时的分支合并

如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们

$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

此时 Git 做了合并,但是没有自动地创建一个新的合并提交。 Git 会暂停下来,等待你去解决合并产生的冲突。 你可以在合并冲突后的任意时刻使用 git status 命令来查看那些因包含合并冲突而处于未合并

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
Unmerged paths:
  (use "git add <file>..." to mark resolution)
  both modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")

三、分支管理

3.1 git branch(查看分支列表)

git branch 命令不只是可以创建与删除分支。 如果不加任何参数运行它,会得到当前所有分支的一个列表:

[root@localhost git_study]# git branch
* clc
  mian
  morant
  testing

3.2 git branch(查看最后一次提交)

如果需要查看每一个分支的最后一次提交,可以运行 git branch -v 命令:

[root@localhost git_study]# git branch -v
* clc     939c2db win the game
  mian    939c2db win the game
  morant  939c2db win the game
  testing 2abbca3 belive youself

3.3 git branch --merged name(查看当前已合并的分支)

如果要查看哪些分支已经合并到当前分支,可以运行 git branch --merged:

$ git branch --merged
  iss53
* master
 git branch --no-merged master
  topicA
  featureB

3.4 git branch --no-merged name(查看当前未合并的分支)

$ git branch --no-merged
  testing
[root@localhost git_study]# git branch --no-merged mian 

四、远程分支

4.1 git push origin name(推送)

如果希望和别人一起在名为 serverfix 的分支上工作,你可以像推送第一个分支那样推送它。 运行 git push :  

$ git push origin serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
 * [new branch] serverfix -> serverfix

4.2 跟踪分支

在Git中,跟踪分支(tracking branch)是一个特殊的本地分支,它与一个远程分支有直接的联系。这种联系意味着当你执行某些Git命令(如git pullgit push)时,Git会自动知道应该与哪个远程分支进行交互

这是一个十分常用的操作所以 Git 提供了 --track 快捷方式:

$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'

如果你尝试检出的分支 (a) 不存在且 (b) 刚好只有一个名字与之匹配的远程分支,那么 Git 就会为你创建一个跟踪分支:

$ git checkout serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'


如果想要将本地分支与远程分支设置为不同的名字,你可以轻松地使用上一个命令增加一个不同名字的本地分支:

$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'

设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支, 你可以在任意时间使用 -u 选项运行 git branch 来显式地设置

$ git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.

如果想要查看设置的所有跟踪分支,可以使用 git branch 的 -vv 选项

$ git branch -vv
  iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
  master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this
should do it
  testing 5ea463a trying something new

如果想要查看设置的所有跟踪分支,可以使用 git branch 的 -vv 选项

$ git branch -vv
  iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
  master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this
should do it
  testing 5ea463a trying something new

4.3 删除远程分支

可以运行带有 --delete 选项的 git push 命令 来删除一个远程分支

$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
 - [deleted] serverfix

五、变基

具体来说,当你有一个分支(比如feature分支)是基于另一个分支(比如master分支)拉出来的,而这个master分支在后续又有新的提交,那么此时可以用master上的这些新提交来作为feature分支的新基底

你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上

$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command


相关文章
|
1月前
|
存储 开发工具 git
git工具使用教程全讲解
本文介绍了版本控制的概念及其重要性,详细对比了多种版本控制工具,如VSS、CVS、SVN和Git,重点讲解了Git的基本使用方法、工作原理及与SVN的区别。此外,文章还介绍了GitHub、GitLab和Gitee等流行的代码托管平台,以及如何在这些平台上注册账号、创建和管理仓库。最后,文章还提供了如何在IntelliJ IDEA中配置和使用Git的具体步骤。
51 1
|
2月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
137 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
2月前
|
开发工具 git 开发者
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
532 3
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
|
3月前
|
缓存 开发工具 git
Git创建分支以及合并分支
在Git中,创建分支使用`git branch [branch_name]`,切换分支使用`git checkout [branch_name]`。修改文件后,通过`git add [file]`添加到暂存区,然后`git commit`提交到本地仓库。如果是新建分支的第一次推送,使用`git push origin [branch_name]`推送到远程仓库,之后可以简化为`git push`。合并分支时,使用`git merge [branch_name]`将指定分支的更改合并到当前分支。
90 2
Git创建分支以及合并分支
|
2月前
|
开发工具 git
Git分支使用总结
Git分支使用总结
41 1
|
2月前
|
编译器 开发工具 数据安全/隐私保护
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
本文提供了一个关于如何在Gitee上进行多人协作和版本控制的详细教程,包括新建和初始化仓库、克隆仓库、邀请好友共同管理仓库以及注意事项,旨在帮助用户顺利进行代码协作开发。
359 0
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
|
3月前
|
测试技术 开发工具 git
掌握 Git 分支策略:提升你的版本控制技能
在现代软件开发中,版本控制至关重要,Git 作为最流行的分布式版本控制系统,其分支管理策略对于高效协作和代码维护尤为重要。本文介绍了几种常用的 Git 分支策略,包括主线开发模型、功能分支模型、Gitflow 工作流和 Forking 工作流,并探讨了如何根据项目需求选择合适的分支模型。通过保持 `master` 分支稳定、及时合并清理分支、使用命名规范、利用 Pull Request 进行代码审查及自动化测试等最佳实践,可以显著提升团队协作效率和软件质量。掌握这些策略将帮助开发者更好地管理代码库,加快开发流程。
|
3月前
|
存储 Linux 开发工具
Git基础命令,分支,标签的使用【快速入门Git】
本文详细介绍了Git版本控制系统的基础概念和常用命令,包括工作区、暂存区和版本库的区别,文件状态的变化,以及如何进行文件的添加、提交、查看状态、重命名、删除、查看提交历史、远程仓库操作和分支管理,还涉及了Git标签的创建和删除,旨在帮助读者快速入门Git。
Git基础命令,分支,标签的使用【快速入门Git】
|
4月前
|
项目管理 开发工具 git
|
4月前
|
存储 小程序 安全
【技巧】git stash用的好,切换分支随便搞
本文详细介绍了 Git 中的 `git stash` 命令,帮助你在切换分支时临时保存未提交的更改。通过实际操作示例,展示了如何使用 `git stash` 的各种命令,如 `save`、`list`、`apply` 等。无论你是初学者还是有一定经验的开发者,都能从中受益。
81 0
【技巧】git stash用的好,切换分支随便搞