Git 分支操作 Tortoise/bash

第一步:创建本地分支

点击右键选择TortoiseGit,选择Create Branch…,在Branch框中填写新分支的名称(若选中”switch to new branch”则直接转到新分支上,省去第二步),点击OK按钮:

 

 

第二步:通过“Switch/Checkout”切换到新创建的分支上,点击OK:

 

 

 

 

第三步:在新分支下执行PUSH操作,在对话框中保持远程分支为空白,点击OK,则将在远程创建了新的分支(在PUSH的时候远程服务器发现远程没有该分支,此时会自动创建一个和本地分支名称一样的分支,并将本地分支的内容上传到该分支)。

 

 

第四步:其他成员切换该新分支:

首先进行pull操作, 然后进行切换分支(如第二步)

 

第五步:分区合并

         进行分支合并之前我们需要明确哪个分支将要合并到哪个分支,首先通过“Switch/CheckOut”切换到主干分支(如develop分支),然后通过“Merge”继进行合并操作,在对话框中选择需要合并的分支。

分支合并成功后,我们即可以通过Commit与PUSH操作将合并上传到中心服务器。

 

 

 

第六步:删除分支

       当我们已将新分支合并到主分支后,或者放弃该分支的时候,可以对该分支进行删除操作。

首先通过“CheckOut/Switch”打开对话框,点击Switch to区域中Branch条目后面的更多按钮,打开分支列表对话框,右键点击要删除的分支,选择delete branch进行删除。

 

 

 

注意,在删除远程分支的时候,本地分支并不会删除,这也说明了本地分支与远程分支并无从属关系。

以上内容原文地址:https://www.cnblogs.com/hbujt/p/5554038.html,侵删。

补充部分:

  1. 第一步创建分支时可能报错,说brunch字段和tag字段非法,只需要确认没有特殊符号即可。
  2. 创建分支时需要写好注释,当分支数量过多时,可能发生无法准确定位具体哪个分支的情况。

Bash部分:

基本操作

1.安装git: sudo apt-get install git
安装后设置: git config --global user.name "Your Name"
                       git config --global user.email "email@example.com"
2.初始化目录为git仓库: git init
   把文件添加到仓库:git add <file>
   把文件提交到仓库:git commit -m <说明>
3.查看仓库当前的状态:git status
   查看修改了哪些内容:git diff
4.查看提交历史:git log (--pretty=oneline)
   查看命令历史:git reflog
   回到上一版本:git reset --hard HEAD^

 

创建一个分支

$ git branch testing  创建一个testing分支

* 创建了分支,但是还没切换到testing分支上

切换到一个分支

$ git checkout testing
快捷写法:

$ git checkout -b mybranch
创建了分支mybranch,并且切换到这个分支下,相当于

$ git branch mybranch
$ git checkout mybranch

git branch 命令不仅仅能创建和删除分支,如果不加任何参数,它会给出当前所有分支的清单

显示为绿色的(行首带*的),就是当前选中的分支,所有的操作都是针对这个分支的,同时要注意,随着对分支的commit,master版本也会随着前移。

当有多个分支,想找到指定分支时,就需要根据写好的注释,执行git branch -v 

可以看到,现在有三个分支,并附带每个分支最后一次提交的注释。

当master上的内容需要和指定branch合并时

$ git checkout master    #切换到master分支
$ git merge mybranch     #合并mybranch到master(merge命令后面跟的是被合并的分支,checkout跟的是主分支)
Updating f42c576..3a0874c
Fast-forward             #由于当前 master 分支所在的提交对象是要并入的 hotfix 分支的直接上游,Git 只需把 master 分支指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)
 README | 1 -
 1 file changed, 1 deletion(-)

处理冲突:

$ 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")

查看Unmerged状态的文件,这些文件都是有冲突的,查看冲突文件内容,可以找到类似:

<<<<<<< HEAD
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
  please contact us at support@github.com
</div>
>>>>>>> iss53

可以看到 ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时所切换到的分支)中的内容,下半部分是在 iss53 分支中的内容。解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决:

<div id="footer">
please contact us at email.support@github.com
</div>

在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决状态(译注:实际上就是来一次快照保存到暂存区域。)。因为一旦暂存,就表示冲突已经解决。

冲突处理图形界面:

运行 git mergetool,它会调用一个可视化的合并工具并引导你解决所有冲突。

$ git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html

Normal merge conflict for 'index.html':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (opendiff):

如果不想用默认的合并工具(Git 为我默认选择了 opendiff,因为我在 Mac 上运行了该命令),你可以在上方"merge tool candidates"里找到可用的合并工具列表,输入你想用的工具名。我们将在第七章讨论怎样改变环境中的默认值。

退出合并工具以后,Git 会询问你合并是否成功。如果回答是,它会为你把相关文件暂存起来,以表明状态为已解决。

再运行一次 git status 来确认所有冲突都已解决:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   index.html

如果觉得满意了,并且确认所有冲突都已解决,也就是进入了暂存区,就可以用 git commit 来完成这次合并提交。提交的记录差不多是这样:

Merge branch 'mybranch'

Conflicts:
  index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#       .git/MERGE_HEAD
# and try again.
#

删除分支:

$ git branch -d mybranch
Deleted branch hotfix (was 3a0874c).

 

Git Branch 需要简单描述几个概念:

  1. Git 保存的不是文件差异或者变化量,而只是一系列文件快照
  2. 以对象的角度考虑,每次提交都会生成一个commit对象,commit对象中最重要的信息就是包含了一个id它指向了git保存的文件快照,以及一个pid指向它的上一次提交的commit对象id。还有一些其它信息,例如作者信息,提交者信息,提交描述信息等。
  3. 执行git branch命令,会生成一个branch对象,用于指向commit对象,标识这个分支是对应的哪次提交。
  4. 为了标识当前是在哪个branch上,git有一个Head对象,这个对象就是一个指向任意一个branch对象的指针。
  5. 因此,当执行了git checkout命令时,就是将Head的指向修改成目标branch对象,也就达到了切换版本的目的。
  6. 完整流程就是,每次commit后,会先生成一个commit对象,并指向上一个commit对象,附属在其上面的branch对象和Head也会跟随前移。

详细内容参考:

https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E4%BD%95%E8%B0%93%E5%88%86%E6%94%AF

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值