git 创建branch分支

简介: 开发者user1 负责用getopt 进行命令解析的功能,因为这个功能用到getopt 函数,于是将这个分支命名为user1/getopt.(1)确保是在开发者user1的工作区中cd /home/jackluo/workspace/user1/workspace/hello-world(2)开发者user1 基于当前HEAD创建分支user1/getopt.
开发者user1 负责用getopt 进行命令解析的功能,因为这个功能用到getopt 函数,于是将这个分支命名为user1/getopt.
(1)确保是在开发者user1的工作区中
cd /home/jackluo/workspace/user1/workspace/hello-world
(2)开发者user1 基于当前HEAD创建分支user1/getopt.
git branch user1/getopt
(3)使用 git branch创建分支,并不会自动切换.查看当前分支可以看到仍然工作在master分支(用星号"*"标识)中.
[root@localhost hello-world]# git branch
* master
  user1/getopt
(4)执行git checkout 命令切换到新分支上
[root@localhost hello-world]# git checkout user1/getopt
已经位于 'user1/getopt'
(5)再次查看分支列表,当前工作分支的标记符(星号)已经落在user1/getopt分支上.
[root@localhost hello-world]# git branch
  master
* user1/getopt
分支实际上是创建在目录.git/refs/heads 下的引用 ,版本库初始时创建的master分支就是在该目录下.

查看一下.git/refs/heads 目录下的引用 .可以在该目录 下看到master文件,和一个user1目录.而在user1目录下是文件getopt。

[root@localhost hello-world]# ls -F .git/refs/heads/
master  user1/

[root@localhost hello-world]# ls -F .git/refs/heads/user1/
getopt

引用文件 .git/refs/heads/user1/getopt记录的是一个提交ID.

[root@localhost hello-world]# cat .git/refs/heads/user1/getopt
d901dd8170f67fec607828905d5fbd91e3272400

因为分支user1/getopt是基于头指针HEAD创建的,因此当前该分支和master分支的指向是一致的.

[root@localhost hello-world]# cat .git/refs/heads/master
d901dd8170f67fec607828905d5fbd91e3272400

===============================

创建分支user2/i18n

创建分支:执行git branch <branchname>命令创建新分支

切换分支:执行git checkout <branchname>命令切换到新分支

git checkout -b <new_branch> [<start_point>]

检出命令git checkout通过参数-b <new_branch> 实现了创建分支和切换分支两个动作的合二为一,下面是

开发者user2就使用git checkout 命令来创建分支,

(1)进入到开发者user2的工作目录 ,并和上游同步一次

[root@localhost workspace]# cd user2/workspace/hello-world/
[root@localhost hello-world]# git pull

(2).执行git checkout -b 命令,创建并切换到新分支user2/i18n上.

[root@localhost hello-world]# git checkout -b user2/i18n
切换到一个新分支 'user2/i18n'

(3)查看本地分支列表,会看到已经创建 并切换到user2/i18n分支上了.

[root@localhost hello-world]# git branch
  master
* user2/i18n

开发者user1完成功能开发

   开发者user1开始在user1/getopt 分支中工作,重构hello-world 中的命令行参 数解析的代码,重构时采用getopt_long 函数.

也可以试着更改,不过在hello-world中已保存了一份改好的代码,可以直接检出.

(1)确保是在user1的工作区中

 cd ../../../user1/workspace/hello-world/

(2)执行下面的命令,用里程B jx/v2.0标记的内容(已实现用getopt 进行命令行解析的功能)替换暂存区和工作区.

下面的git checkout 命令的最后是一个点"."因此检出只更改了暂存区和工作区,

而没有修改头指针.

git checkout jx/v2.0 -- .

(3)查看状态,会看到分支仍保持为user1/getopt,但文件src/main.c 被修改了.

[root@localhost hello-world]# git status
# 位于分支 user1/getopt
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#    修改:      src/Makefile
#    修改:      src/main.c
#

(4)比较暂存区和HEAD的文件差异,可以看到为实现用getopt进行命令行解析功能而对代码 的改动

[root@localhost hello-world]# git diff --cached

(5)开发者user1提交代码,完成任务 .

[root@localhost hello-world]# git commit -m "Refactor: use getopt_long for arguments parsing."

(6).提交完成之后,可以看到这时 user1/getopt分支和master分支的指向不同了。

[root@localhost hello-world]# git rev-parse user1/getopt master
733dcf67eba976a61d0dc6396c9d23cb23568591
d901dd8170f67fec607828905d5fbd91e3272400
(7)编译运行hello-world.
注意输出中的版本号显示.
[root@localhost src]# make clean
rm -f hello main.o version.h
[root@localhost src]# make
version.h.in => version.h
cc    -c -o main.o main.c
cc -o hello main.o
[root@localhost src]# ./hello 
Hello world.
(version: v1.0-1-g733dcf6)

将user1/getopt分支合并到主线

(1),为将分支合并到主线,首先user1将工作区切换到主线,master分支.

[root@localhost src]# git checkout master
切换到分支 'master'

(2)然后执行git merge命令以合并user1/getopt 分支.

[root@localhost src]# git merge user1/getopt
更新 d901dd8..733dcf6

(3)本次合并非常顺利,实际上合并后master分支和user1/getopt指向同一个提交 ,这是因为合并前的master的提交就是user/getopt分支的父提交,所以此次合并相当于将分支master重置到user1/getopt分支

[root@localhost src]# git rev-parse user1/getopt master
733dcf67eba976a61d0dc6396c9d23cb23568591
733dcf67eba976a61d0dc6396c9d23cb23568591

(4)查看状态信息可以看到本地和远程分支的跟踪关系 .

[root@localhost src]# git status
# 位于分支 master
# 您的分支领先 'origin/master'1 个提交。
#   (使用 "git push" 来发布您的本地提交)
#
无文件要提交,干净的工作区

(5)上面的状态输出中显示本地master分支比远程共享版本库的master分支领先.可以运行git cherry命令查看喜好些提交领先(未被推送到上游跟踪分支中).

[root@localhost src]# git cherry
+ 733dcf67eba976a61d0dc6396c9d23cb23568591

(6)执行推送操作,完成本地分支向远程分支的同步

[root@localhost src]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)

Counting objects: 21, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 588 bytes | 0 bytes/s, done.
Total 5 (delta 3), reused 1 (delta 1)
To /home/jackluo/workspace/repos/hello-world.git
   d901dd8..733dcf6  master -> master

(7)删除 user1/getopt分支.

隐然特性分支user1/getopt 已经合并到主线上了,那么分支完成了历史命,可以放心地将其删除.

[root@localhost src]# git branch -d user1/getopt
已删除分支 user1/getopt(曾为 733dcf6)。

 

 

 

 

 

 

 

 

 

目录
相关文章
|
3月前
|
存储 安全 开发工具
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
285 4
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
|
19天前
|
开发工具 git
Git版本控制工具合并分支merge命令操作流程
通过以上步聚焦于技术性和操作层面指南(guidance), 可以有效管理项目版本控制(version control), 并促进团队协作(collaboration).
114 15
|
8月前
|
开发工具 git
图解Git——分支的新建与合并《Pro Git》
在Git开发中,新建与合并分支是常见的操作。以实际开发为例:为实现新需求创建分支`iss53`进行开发;遇紧急Bug时,切换至线上分支创建`hotfix`修复并合并回线上分支,再切换回`iss53`继续工作。完成`iss53`后,切换到`master`合并。若出现冲突,使用`git status`查看,手动编辑解决冲突后标记为已解决并提交。图形化工具如`git mergetool`也可辅助解决冲突。
179 9
|
8月前
|
开发工具 git 开发者
图解Git——分支简介《Pro Git》
Git 分支是其核心特性之一,允许开发者从主开发线分离工作,避免干扰主线。传统版本控制系统创建分支效率低,而Git的分支创建和切换非常轻量高效。
457 9
|
7月前
|
开发工具 git 开发者
vscode+git解决远程分支合并冲突
通过这些详细步骤,您可以掌握如何使用VSCode和Git高效地解决远程分支合并冲突,提高开发效率和代码质量。希望这些内容对您的学习和工作有所帮助。
1659 86
|
8月前
|
存储 项目管理 开发工具
图解Git——分支开发工作流《Pro Git》
分支开发工作流利用Git的分支功能,支持灵活的项目管理。长期分支如`master`和`develop`分别保存稳定和开发中的代码;短期主题分支用于开发单一特性或修复问题,完成后合并到主分支。此模式确保代码稳定性,支持并行开发、便于审查和灵活调整。建议维护明确的长期分支,保持主题分支短小精悍,并定期清理无用分支。配置上可保护关键分支,遵循命名规范。
353 7
|
8月前
|
存储 缓存 Java
图解Git——远程分支《Pro Git》
远程分支是 Git 中用于管理分布式协作的关键概念。远程引用指向远程仓库中的分支和标签,常用 `git ls-remote` 或 `git remote show` 查看。日常开发中,通常使用远程跟踪分支(如 `origin/main`)与远程分支交互,简化远程仓库状态的管理和使用。远程跟踪分支记录远程分支的状态,但本身只读。
154 6
|
11月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
289 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
11月前
|
开发工具 git 开发者
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
2715 3
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
|
11月前
|
开发工具 git
Git分支使用总结
Git分支使用总结
134 1