设为首页 收藏本站
查看: 739|回复: 0

[经验分享] git 创建branch分支【转】

[复制链接]

尚未签到

发表于 2018-1-15 19:12:28 | 显示全部楼层 |阅读模式
  转自:http://www.cnblogs.com/jackluo/p/3499731.html
  

开发者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分支(用星号"*"标识)中.
[iyunv@localhost hello-world]# git branch

  * master
  user1/getopt
  (4)执行git checkout 命令切换到新分支上
[iyunv@localhost hello-world]# git checkout user1/getopt

  已经位于 'user1/getopt'
  (5)再次查看分支列表,当前工作分支的标记符(星号)已经落在user1/getopt分支上.
[iyunv@localhost hello-world]# git branch

  master
  * user1/getopt
  分支实际上是创建在目录.git/refs/heads 下的引用 ,版本库初始时创建的master分支就是在该目录下.
  


  查看一下.git/refs/heads 目录下的引用 .可以在该目录 下看到master文件,和一个user1目录.而在user1目录下是文件getopt。
[iyunv@localhost hello-world]# ls -F .git/refs/heads/

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

  getopt
  引用文件 .git/refs/heads/user1/getopt记录的是一个提交ID.
[iyunv@localhost hello-world]# cat .git/refs/heads/user1/getopt

  d901dd8170f67fec607828905d5fbd91e3272400
  因为分支user1/getopt是基于头指针HEAD创建的,因此当前该分支和master分支的指向是一致的.
[iyunv@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的工作目录 ,并和上游同步一次
  

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

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

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

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

[iyunv@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 被修改了.

  

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


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

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

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

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

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

[iyunv@localhost hello-world]# git rev-parse user1/getopt master  
733dcf67eba976a61d0dc6396c9d23cb23568591
  
d901dd8170f67fec607828905d5fbd91e3272400
  (7)编译运行hello-world.
  注意输出中的版本号显示.
  


  

[iyunv@localhost src]# make clean  
rm -f hello main.o version.h
  
[iyunv@localhost src]# make
  
version.h.in => version.h
  
cc    -c -o main.o main.c
  
cc -o hello main.o
  
[iyunv@localhost src]# ./hello
  
Hello world.
  
(version: v1.0-1-g733dcf6)
  


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

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

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

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

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

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

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

  

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


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

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

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

  

[iyunv@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 已经合并到主线上了,那么分支完成了历史命,可以放心地将其删除.
  

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435444-1-1.html 上篇帖子: python git的一些命令 下篇帖子: [Git] 给git命令起别名
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表