87.分支及远程分支管理 标签 别名

て烟熏妆下的殇ゞ 提交于 2019-12-02 04:05:42

22.9 分支管理

22.10 远程分支管理

22.11 标签管理

22.12 git别名

 

 

 

 

!!22.9 分支管理

 

 

基本操作

1.git branch //查看分支

2.git branch aming //创建分支

3.git checkout aming //切换到了aming分支下

4.再用git branch查看,会看到有两个分支master和aming,当前使用的分支前面会有一个*在aming分支下 ,编辑2.txt,并提交到新分支

5.echo "askdfjlksadjflk" > 2.txt

6.git add 2.txt

7.git commit -m "laksjdflksjdklfj"

8.切换回master分支

git checkout master //此时cat 2.txt发现并没有更改内容

 

分支的合并

合并的时候尽量保证两边的数据没有冲突才可以

1.git checkout master //合并分支之前,先切换到目标分支

#将aming分支合并到master分支上去,要先切换到master分支上去

#合并之后两个分支的变化是一样的

2.git merge aming //把aming分支合并到了master

如果master分支和aming分支都对2.txt进行了编辑,当合并时会提示冲突,需要先解决冲突才可以继续合并。

解决冲突的方法是在master分支下,编辑2.txt,改为aming分支里面2.txt的内容。 然后提交2.txt,再合并aming分支。

但是这样有一个问题,万一master分支更改的内容是我们想要的呢? 可以编辑2.txt内容,改为想要的,然后提交。切换到aming分支,然后合并master分支到aming分支即可(倒着合并)。合并分支有一个原则,那就是要把最新的分支合并到旧的分支。

!!也就是说merge后面跟的分支名字一定是最新的分支。

3.git branch -d aming //删除分支

如果分支没有合并,删除之前会提示,那就不合并,强制删除:

git branch -D aming #强制删除

 

 

 

实例:

基本操作

1.

[root@axinlinux-01 ~]# cd /data/gitroot/ #要先进入你的项目里

[root@axinlinux-01 gitroot]# git branch #查看分支

* master #星号表示当前所在的分支

2.

[root@axinlinux-01 gitroot]# git branch aming #创建分支

[root@axinlinux-01 gitroot]# git branch #可以查看到刚创建的分支

aming

* master

3.

[root@axinlinux-01 gitroot]# git checkout aming #切换到aming分支下

切换到分支 'aming'

[root@axinlinux-01 gitroot]# git branch

* aming #星号表示所在的分支

master

[root@axinlinux-01 gitroot]# ls #aming分支跟在master分支的文件是一样的

2.txt

4.

[root@axinlinux-01 gitroot]# vim 3.txt #在aming分支下创建3.txt

[root@axinlinux-01 gitroot]# git add 3.txt #推送到本地库

[root@axinlinux-01 gitroot]# git commit -m "add 3.txt" #执行到commit就算是推送到本地库了

[aming 6730eab] add 3.txt

1 file changed, 7 insertions(+)

create mode 100644 3.txt

[root@axinlinux-01 gitroot]# ls #在aming分支下是可以看到的

2.txt 3.txt

[root@axinlinux-01 gitroot]# git checkout master #在切换到master分支下

切换到分支 'master'

[root@axinlinux-01 gitroot]# ls #是看不到的,这说明分支是相互隔离开的。分支跟分支之间操作的文件是不受影响的

2.txt

分支的合并

[root@axinlinux-01 gitroot]# git branch #先查看是不是在目标分支下

aming

* master

[root@axinlinux-01 gitroot]# ls #看一下现有的文件

2.txt

[root@axinlinux-01 gitroot]# git merge aming #将aming分支合并到当前坐在的分支下(master)

更新 1663deb..6730eab

Fast-forward

3.txt | 7 +++++++

1 file changed, 7 insertions(+)

create mode 100644 3.txt

[root@axinlinux-01 gitroot]# ls #再来看就有了之前在aming分支下创建的3.txt了

2.txt 3.txt

[root@axinlinux-01 gitroot]# git branch #查看一下分支所在

aming

* master

[root@axinlinux-01 gitroot]# vim 2.txt #更改一下2.txt

[root@axinlinux-01 gitroot]# git add 2.txt #推到本地仓库

[root@axinlinux-01 gitroot]# git commit -m "ch 2.txt"

[master d551e46] ch 2.txt

1 file changed, 4 insertions(+)

create mode 100644 2.txt

[root@axinlinux-01 gitroot]# git checkout aming

切换到分支 'aming'

[root@axinlinux-01 gitroot]# vim 2.txt #在aming分支上,对2.txt做不同的变更

[root@axinlinux-01 gitroot]# git add 2.txt #再次提交

[root@axinlinux-01 gitroot]# git commit -m "ch 2.txt"

[aming 4396bef] ch 2.txt

1 file changed, 1 insertion(+)

create mode 100644 2.txt

[root@axinlinux-01 gitroot]# git checkout master #我们再切换到master分支,准备做合并

切换到分支 'master'

[root@axinlinux-01 gitroot]# git merge aming #此时将aming合并过来就报错了

自动合并 2.txt

冲突(添加/添加):合并冲突于 2.txt

自动合并失败,修正冲突然后提交修正的结果。 #因为我们两个变更的不一样

[root@axinlinux-01 gitroot]# git checkout aming #此时我们切换分支是切换不过去的

2.txt: needs merge

error: 您需要先解决当前索引的冲突

[root@axinlinux-01 gitroot]# vim 2.txt #打开这个文件,他会自动的帮我们分析出差异

<<<<<<< HEAD

aaaaaaaaaaaaaaaaa

11111111111111111

bbbbbbbbbbbbbbbbb

ccccccccccccccccc

======= #上面是master的,下面是aming的

aaaaaaaaaaaaaaaaaaaaaa

>>>>>>> aming

此时,我们可以将aming的部分删掉,保持和master一致

[root@axinlinux-01 gitroot]# git add 2.txt #然后再重新提交

[root@axinlinux-01 gitroot]# git commit -m "merge 2.txt"

[master 76eb0c0] merge 2.txt

[root@axinlinux-01 gitroot]# git merge aming #此时在合并就可以了

Already up-to-date.

[root@axinlinux-01 gitroot]# git checkout aming #然后就可以切换分支了

切换到分支 'aming'

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

22.10 远程分支管理

 

 

 

使用分支的原则

对于分支的应用,建议大家以这样的原则来:

1.master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上。

#我们克隆分支的时候只能把master分支克隆下来

2.创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master

3.开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支

#也就是我们创建一个dev的分支,在dev的基础上再分支几个个人的分支,各自写自己负责的代码。等写完以后,每个人再把各自的分支合并到dev里面去。然后dev再合并到master里面去

4.dev分支合并bob分支的命令是:

git checkout dev //先切换到dev分支,然后

git merge bob

 

远程分支

1.本地新建的分支如果不推送到远程,对其他人就是不可见的

2.git ls-remote origin

#查看远程分支 ,可以看到所有分支

3.对于git push分支分两种情况(就是在本地master分支与dev分支都做了变更,那会推送哪一个呢?)

第一种,当本地分支和远程分支一致时(两方都有一样的分支)

git push会把所有本地分支的变更一同推送到远程

如果想只推送一个分支,使用git push origin branch-name

第二种,当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用git push origin branch-name 如果推送失败,先用git pull抓取远程的新提交

4.git checkout -b branch-name origin/branch-name(branch-name为远程分支的名字)

#git clone的时候默认只把master分支克隆下来,如果想把所有分支都克隆下来,需要手动创建,在本地创建和远程分支对应的分支,使用origin/branch-name,本地和远程分支的名称要一致

 

总结:

要想把远程的分支搞下来,使用git checkout -b (远程分支名) origin/(远程分支名)

把本地的分支推到远程,使用git push origin (分支名)

 

 

实例:

我们先打开远程,创建一个新的文件

再创建一个分支dev

我们把远程的这个项目克隆到本地来

[root@axinlinux-01 tmp]# cd /data/

[root@axinlinux-01 data]# git clone https://github.com/axin-linux/aming_linux.git

正克隆到 'aming_linux'...

remote: Enumerating objects: 18, done.

remote: Counting objects: 100% (18/18), done.

remote: Compressing objects: 100% (11/11), done.

remote: Total 18 (delta 2), reused 9 (delta 0), pack-reused 0

Unpacking objects: 100% (18/18), done.

[root@axinlinux-01 data]# cd aming_linux/

[root@axinlinux-01 aming_linux]# ls

2.txt 3.txt linux.doc README.md

[root@axinlinux-01 aming_linux]# git branch #可以看到我们克隆下来的只有master这一个分支

* master

远程分支

1.

[root@axinlinux-01 aming_linux]# git ls-remote origin #用命令行看远程分支。也可以去github上去看

b2a2250ef5e91caa96817e59dda897c28fd5e338 HEAD #这个不用管

b2a2250ef5e91caa96817e59dda897c28fd5e338 refs/heads/dev #这代表的就是两个分支

b2a2250ef5e91caa96817e59dda897c28fd5e338 refs/heads/master

4.

[root@axinlinux-01 aming_linux]# git checkout -b dev origin/dev

分支 dev 设置为跟踪来自 origin 的远程分支 dev。

切换到一个新分支 'dev'

[root@axinlinux-01 aming_linux]# git branch

* dev

master

[root@axinlinux-01 aming_linux]# vim sb.txt 我们在dev分支上做一个更改

[root@axinlinux-01 aming_linux]# git add sb.txt

[root@axinlinux-01 aming_linux]# git commit -m "add sb.txt"

[root@axinlinux-01 aming_linux]# git push #记得要push一下才能到远程

Username for 'https://github.com': axin-linux

Password for 'https://axin-linux@github.com':

Counting objects: 4, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 265 bytes | 0 bytes/s, done.

Total 3 (delta 1), reused 0 (delta 0)

remote: Resolving deltas: 100% (1/1), completed with 1 local object.

To https://github.com/axin-linux/aming_linux.git

b2a2250..13aa9d9 dev -> dev #在这会显示dev 到dev

[root@axinlinux-01 aming_linux]# git push origin dev #直推dev分支

Username for 'https://github.com': axin-linux

Password for 'https://axin-linux@github.com':

Everything up-to-date

[root@axinlinux-01 aming_linux]# git branch dev2 #我们在本地增加一个新的分支dev2

[root@axinlinux-01 aming_linux]# git branch #查看一下

* dev

dev2

master

[root@axinlinux-01 aming_linux]# git checkout dev2 #切换到dev2

切换到分支 'dev2'

[root@axinlinux-01 aming_linux]# ls

2.txt 3.txt linux.doc README.md sb.txt

[root@axinlinux-01 aming_linux]# vim 1.txt #做个变更,增加一个文件

[root@axinlinux-01 aming_linux]# git add 1.txt

[root@axinlinux-01 aming_linux]# git commit -m "add 1.txt"

此时在远程dev2这个分支是没有的。我们git push一下

[root@axinlinux-01 aming_linux]# git push #结果报错了fatal

fatal: 当前分支 dev2 没有对应的上游分支。

为推送当前分支并建立与远程上游的跟踪,使用

 

git push --set-upstream origin dev2 #也提示了该怎么做

 

[root@axinlinux-01 aming_linux]# git push origin dev2 #这个可能是上面提示的缩写

* [new branch] dev2 -> dev2 #直接看最下面这一行

回到github看一下,就能发现

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

22.11 标签管理

 

 

标签可理解为类似分支的东西。在这个标签里同样的也会有一个状态,在这个状态里也会有当时的commit对应的一些代码,以及对应代码的一些内容、文件、目录、等等

标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。

比如我们今天对外发布了一个版本,打一个标签比如为1.0版本

对比分支,标签完成后就不在动他了,相当于是静态的

1.git checkout master 先切到master分支上

以后打标签也是针对master来做。当然其他的分支也是可以打标签的

2.git tag v1.0 给master打一个标签v1.0

git tag #不加版本号可查看当前分支下有哪些标签

3.git show v1.0 查看标签信息

tag是针对commit来打标签的,所以可以针对历史的commit来打tag

4.git log --pretty=oneline --abbrev-commit //先查看历史的commit

#后面的--abbrev-commit是用简写的commit,可以不用写

5.git tag v0.9 46d3c1a //针对历史commit打标签

#版本号后面跟commit号

6.git tag -a v0.1 -m "first commit" 5aacaf4 //可以对标签进行描述

#创建v0.1版本的时候,对v0.1描述

7.git tag -d v0.8 //删除标签

8.git push origin v1.0 //推送指定标签到远程

#以上操作都是针对本地的,git push origin为推送指定标签到远程

9.git push --tag origin //推送所有标签

#以上操作都是针对本地的,git push --tag origin为推送所有标签到远程

10.如果本地删除了一个标签,远程也想要删除需要这样操作:

git tag v1.0 -d //删除本地标签

git push origin :refs/tags/v1.0 //删除远程标签

 

 

 

实例:

1.

[root@axinlinux-01 aming_linux]# git checkout master

切换到分支 'master'

2.

[root@axinlinux-01 aming_linux]# git tag #查看当前分支

[root@axinlinux-01 aming_linux]# git tag v1.0 #当前分支打标签为v1.0

[root@axinlinux-01 aming_linux]# git tag #查看标签

v1.0

3.

[root@axinlinux-01 aming_linux]# git show v1.0

commit b2a2250ef5e91caa96817e59dda897c28fd5e338 #打标签是基于commit打的,后面跟的字符串就是对应的commit,也就是最新的。第4步查看commit可比较

Author: axin-linux <45262373+axin-linux@users.noreply.github.com>

Date: Sat Nov 24 22:06:18 2018 +0800

 

Create linux.doc

 

diff --git a/linux.doc b/linux.doc

new file mode 100644

index 0000000..30c7f6b

--- /dev/null

+++ b/linux.doc

@@ -0,0 +1,6 @@

+fewfe

+ewfwerfewrwe

+213123

+123123

+213123

+12312321

4.

[root@axinlinux-01 aming_linux]# git log --pretty=oneline

b2a2250ef5e91caa96817e59dda897c28fd5e338 Create linux.doc #这个就是最新的comit,也就说我们上面默认的打的标签

acb3a31bdd59dcf502658e6b0704d5b6cc202bf3 Update README.md

191c91566f4bf48af2e1ba8a9cbd03a334b0c100 Update 2.txt

63630b4f54a13a0f702e67475a0ececd70a9db88 add 3.txt

27e12499daf87e1ac1983813a9089b88873d95fd add 2.txt

25ca73993a55d6a079132188e19e622c8d775107 first commit

5.

[root@axinlinux-01 aming_linux]# git tag v0.8 191c91566f4b #历史commit打v0.8标签

[root@axinlinux-01 aming_linux]# git tag

v0.8

v1.0

6.

[root@axinlinux-01 aming_linux]# git tag -a v0.1 -m "first tag" 25ca739

[root@axinlinux-01 aming_linux]# git show v0.1 #show的时候可以看到描述,此处不做展示了

8.

以上,远程查看标签

[root@axinlinux-01 aming_linux]# git push origin v1.0 #我们将v1.0推上去

Username for 'https://github.com': axin-linux

Password for 'https://axin-linux@github.com':

Total 0 (delta 0), reused 0 (delta 0)

To https://github.com/axin-linux/aming_linux.git

* [new tag] v1.0 -> v1.0

再回到github上刷新一下:

 

 

10.

[root@axinlinux-01 aming_linux]# git tag -d v0.8 #删除本地

已删除 tag 'v0.8'(曾为 191c915)

[root@axinlinux-01 aming_linux]# git push origin :refs/tags/v0.8 #删除远程

Username for 'https://github.com': axin-linux

Password for 'https://axin-linux@github.com':

To https://github.com/axin-linux/aming_linux.git

- [deleted] v0.8

 

 

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

22.12 git别名

 

 

 

1.git commit 这个命令是不是有点长? 用别名可以提高我们的工作效率

git config --global alias.ci commit

git config --global alias.co checkout

git config --global alias.br branch

2.查看git别名使用命令

git config --list |grep alias

#git config --list查看所有的配置

3.别名的配置文件:

/root/.gitconfig #可在这里面直接加入别名(但最好用命令行的形式去写)

4.查询log小技巧:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

#以上字段执行完,在执行git lg,这样查询到的日志就会很漂亮,很直观

5.取消别名

git config --global --unset alias.br

 

 

 

实例:

[root@axinlinux-01 data]# cd gitroot/

[root@axinlinux-01 gitroot]# ls

2.txt 3.txt

[root@axinlinux-01 gitroot]# git config --global alias.ci commit #创建commit别名为ci

[root@axinlinux-01 gitroot]# vi 4.txt

[root@axinlinux-01 gitroot]# git add 4.txt

[root@axinlinux-01 gitroot]# git ci -m "alias 4.txt" #使用别名ci

[axin dee7175] alias 4.txt

1 file changed, 1 insertion(+)

create mode 100644 4.txt

[root@axinlinux-01 gitroot]# git config --global alias.br branch

[root@axinlinux-01 gitroot]# git br

* axin

master

[root@axinlinux-01 gitroot]# git config --global alias.co checkout

[root@axinlinux-01 gitroot]# git co master

[root@axinlinux-01 gitroot]# git config --list |grep alias

alias.ci=commit

alias.br=branch

alias.co=checkout

[root@axinlinux-01 gitroot]# git config --global --unset alias.br #取消br别名

[root@axinlinux-01 gitroot]# git br

git:'br' 不是一个 git 命令。参见 'git --help'。

 

您指的是这其中的某一个么?

branch

var

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!