Git本地分支以及远程分支管理

一、查看分支

查看命令介绍:
1.列出所有分支  包括远程分支和本地分支
git branch -a
    
例子:
[root@node3 base1]# git branch -a
* master
  remotes/origin/jishubu
  remotes/origin/master

2.只列出远程分支
git branch -r

[root@node3 base1]# git branch -r
  origin/jishubu
  origin/master
   
3.只列出本地分支
git branch

例子:
[root@node3 base1]# git branch
* master

二、git branch创建分支

#当前只有一个master主分支
[root@node1 base1]# git branch
* master

#创建了一个test分支
[root@node1 base1]# git branch test
[root@node1 base1]# git branch
* master
  test

三、git checkout -b 创建分支

1.在裸仓库中是不能使用git checkout -b 创建分支的

[root@node1 data]# cd base1/
[root@node1 base1]# ls
branches  config  description  HEAD  hooks  info  objects  readme  refs
[root@node1 base1]# git branch
* master
  test
[root@node1 base1]# git checkout -b test1
fatal: This operation must be run in a work tree

2.在带有工作区的仓库中是可以使用git checkout -b 来创建分支的

[root@node1 ~]# mkdir git_test_base
[root@node1 ~]# git init git_test_base/
Initialized empty Git repository in /root/git_test_base/.git/
[root@node1 ~]# cd git_test_base/
[root@node1 git_test_base]# ls
[root@node1 git_test_base]# touch test
[root@node1 git_test_base]# git add -A
[root@node1 git_test_base]# git  commit -m '1'
[master (root-commit) 16381f9] 1
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test

#我们发现提交完数据之后会自动创建一个master分支
[root@node1 git_test_base]# git branch
* master

#我们使用branch创建一个分支 是不会切换到新分支上,还停留在原理的分支上
[root@node1 git_test_base]# git branch test
[root@node1 git_test_base]# git branch
* master
  test

#而是用checkout -b 创建完分支后并且会自动切换到新的分支上
[root@node1 git_test_base]# git checkout -b test1
Switched to a new branch 'test1'
[root@node1 git_test_base]# git branch
  master
  test
* test1

四、切换分支git checkout

[root@node1 git_test_base]# git branch
* master
  test
[root@node1 git_test_base]# git checkout test
Switched to branch 'test'
[root@node1 git_test_base]# git branch
  master
* test

五、分支实例演示

注意点(以下表述是为了方便理解,真正原理并非如下叙述,真正原理是HEAD的指向问题):

1.当我们创建新的分支时,你在哪个分支上创建的新分支,就会把当前分支上的复制到新的分支上
2.不论在哪个分支的工作区中新增文件,其它分支都能看到,但是一旦提交了,就属于自己分支的内容了,其它 分支就看不到了,如果其它分支想看到,就需要合并分支了

1.验证注意点1

[root@node1 ~]# cd git_test_base/
[root@node1 git_test_base]# git init ./
Initialized empty Git repository in /root/git_test_base/.git/

#新增数据,git仓库会自动创建master主分支
[root@node1 git_test_base]# touch master1
[root@node1 git_test_base]# git add -A
[root@node1 git_test_base]# git  commit -m 'master1'
[master (root-commit) 7c6e8bb] master1
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 master1

#master主分支出现
[root@node1 git_test_base]# git branch
* master

#创建测试分支,并且切换到zhangsan分支上
[root@node1 git_test_base]# git checkout -b zhangsan
Switched to a new branch 'zhangsan'
[root@node1 git_test_base]# git branch
  master
* zhangsan

#我们发现是可以看到master的文件的。
[root@node1 git_test_base]# ls
master1

2.验证注意点2

#我们在zhangsan分支上添加新文件
[root@node1 git_test_base]# git branch
  master
* zhangsan
[root@node1 git_test_base]# touch zhangsan
[root@node1 git_test_base]# echo "zhangsan" >> zhangsan 
[root@node1 git_test_base]# cat zhangsan 
zhangsan

#我们切换到master分支上,查看是否可以看到zhangsan未提交的数据
[root@node1 git_test_base]# git checkout master
Switched to branch 'master'
[root@node1 git_test_base]# ls
master1  zhangsan

#我们在master上是可以到zhangsan分支上未提价的数据的
[root@node1 git_test_base]# cat zhangsan 
zhangsan

我们在切换到zhangsan分支 提交zhangsan分支上的数据,看master是否还能看到zhangsan新增的数据

[root@node1 git_test_base]# git checkout zhangsan
Switched to branch 'zhangsan'
[root@node1 git_test_base]# git branch
  master
* zhangsan
[root@node1 git_test_base]# git add -A
[root@node1 git_test_base]# git  commit -m 'zhangsan'
[zhangsan 73e7cea] zhangsan
 1 file changed, 1 insertion(+)
 create mode 100644 zhangsan

我们在切换回master看看,我们看不到zhangsan提交后的数据了

[root@node1 git_test_base]# git checkout master
Switched to branch 'master'
[root@node1 git_test_base]# git branch
* master
  zhangsan
[root@node1 git_test_base]# ls
master1

我们来合并分支来看看

[root@node1 git_test_base]# git branch
* master
  zhangsan

#合并分支
[root@node1 git_test_base]# git merge zhangsan
Updating 7c6e8bb..73e7cea
Fast-forward
 zhangsan | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 zhangsan

#此时将zhangsan分支合并到了master分支,此时我们就看到了zhangsan的内容
[root@node1 git_test_base]# ls
master1  zhangsan
[root@node1 git_test_base]# cat zhangsan 
zhangsan

六、远程分支管理和本地分支建立关系

1.git push和git pull参数详解

在前边的几篇文章中 我们没有涉及到到分支的概念,使用的命令格式也比较简单 比如:
git pull、git push origin master
现在涉及到分支的概念了 就要详细讲讲这两个参数的用法
(1)git push用法
1.将本地当前分支 推送到 与本地当前分支同名的远程分支上(需先关联远程分支,方法见文章末尾)
git push

2.将本地当前分支 推送到 与本地当前分支同名的远程分支上
git push origin <本地分支名>

3.将本地当前分支 推送到 远程指定分支上
git push origin <本地分支名>:<远程分支名>

推荐使用第二种
(2)git pull用法
1、将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支,方法见文章末尾)
git pull

2、将远程指定分支 拉取到 本地当前分支上:
git pull origin <远程分支名>

3、将远程指定分支 拉取到 本地指定分支上:
git pull origin <远程分支名>:<本地分支名>

推荐使用第二种		

2.在服务端建立分支,客户端拉取

#初始化一个裸仓库
[root@node1 ~]# cd /data/base1/
[root@node1 base1]# git init --bare ./
Initialized empty Git repository in /data/base1/.git/
[root@node1 ~]# chmod -R 777 /data/base1/
(1)在客户端克隆仓库,并且提交数据
[root@node3 data]# git clone test1@192.168.1.107:/data/base1
Cloning into 'base1'...
test1@192.168.1.107's password: 
warning: You appear to have cloned an empty repository.

[root@node3 data]# cd base1/
[root@node3 base1]# touch client
[root@node3 base1]# echo "hello" >> client
[root@node3 base1]# git add -A
[root@node3 base1]# git commit -m '123'
[master (root-commit) e62862f] 123
 1 file changed, 1 insertion(+)
 create mode 100644 client

#提交数据到远程仓库
[root@node3 base1]# git remote -v
origin	test1@192.168.1.107:/data/base1 (fetch)
origin	test1@192.168.1.107:/data/base1 (push)

[root@node3 base1]# git push origin master
test1@192.168.1.107's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To test1@192.168.1.107:/data/base1
 * [new branch]      master -> master

(2)在服务端创建分支
[root@node1 ~]# cd /data/base1/
[root@node1 base1]# ls
branches  config  description  HEAD  hooks  info  objects  refs
[root@node1 base1]# git branch
* master
[root@node1 base1]# git branch jishubu
[root@node1 base1]# git branch
  jishubu
* master

(3)在客户端拉取远程分支方法1
[root@node3 base1]# git branch -a
* master
  remotes/origin/master

#更新远程仓库
[root@node3 base1]# git remote update
Fetching origin
test1@192.168.1.107's password: 
From 192.168.1.107:/data/base1
 * [new branch]      jishubu    -> origin/jishubu

#我们在客户端查看远程仓库列表
[root@node3 base1]# git branch -r
  origin/jishubu
  origin/master

#但是我们的本地分支还是只有master
[root@node3 base1]# git branch
* master

#我们在客户端口直接checkout jishubu即可,git会自动在本地创建jishubu分支
[root@node3 base1]# git checkout jishubu
Branch jishubu set up to track remote branch jishubu from origin.
Switched to a new branch 'jishubu'

[root@node3 base1]# git branch
* jishubu
  master

#测试:将本地的数据提交到远程分支上
[root@node3 base1]# touch jishubu
[root@node3 base1]# git add -A
[root@node3 base1]# git commit -m 'jishubu'
[jishubu 499ee65] jishubu
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 jishubu
 
[root@node3 base1]# git push origin jishubu
test1@192.168.1.107's password: 
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 268 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To test1@192.168.1.107:/data/base1
   a207f40..499ee65  jishubu -> jishubu


(4)在客户端拉取远程分支方法2
#1.我们在服务端创建一个caiwubu分支
#2.在客户端本地创建一个分支caiwubu,然后切换到caiwubu分支上
[root@node3 base1]# git branch -a
* jishubu
  master
  remotes/origin/jishubu
  remotes/origin/master

[root@node3 base1]# git checkout -b caiwubu
Switched to a new branch 'caiwubu'

[root@node3 base1]# git branch
* caiwubu
  jishubu
  master

[root@node3 base1]# git pull origin caiwubu
test1@192.168.1.107's password: 
From 192.168.1.107:/data/base1
 * branch            caiwubu    -> FETCH_HEAD
Already up-to-date.


#测试 提交数据
[root@node3 base1]# touch caiwubu
[root@node3 base1]# git add -A
[root@node3 base1]# git commit -m 'caiwubu'
[caiwubu 2dc9709] caiwubu
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 caiwubu

[root@node3 base1]# git push origin caiwubu
test1@192.168.1.107's password: 
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 268 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To test1@192.168.1.107:/data/base1
   a207f40..2dc9709  caiwubu -> caiwubu


3.在客户端建立分支,然后推送到服务端

1.首先要保证客户端的仓库和服务端的仓库是有联系的
[root@node3 base1]# git remote -v
origin	test1@192.168.1.107:/data/base1 (fetch)
origin	test1@192.168.1.107:/data/base1 (push)

2.我们在客户端创建本地仓库
[root@node3 base1]# git branch
* master
[root@node3 base1]# git checkout -b test
Switched to a new branch 'test'
[root@node3 base1]# git branch
  master
* test

3.将本地分支推送到远程仓库上去
#先查看服务端仓库的分支,服务端只有一个master分支
[root@node1 base1]# git branch
* master

#将本地分支推送到服务端
[root@node3 base1]# git push origin test
test1@192.168.1.107's password: 
Total 0 (delta 0), reused 0 (delta 0)
To test1@192.168.1.107:/data/base1
 * [new branch]      test -> test

#我们回到服务端 查看分支,我们发现服务端自动创建了test分支
[root@node1 base1]# git branch
* master
  test

七、删除分支

注意:在删除分支的时候,是不能停留在要删除的分支上的

1.删除本地分支

[root@node1 git_test_base]# git branch
  master
  test
* test1
[root@node1 git_test_base]# git checkout master
Switched to branch 'master'
[root@node1 git_test_base]# git branch
* master
  test
  test1

#删除test1分支
[root@node1 git_test_base]# git branch -d test1
Deleted branch test1 (was 16381f9).
[root@node1 git_test_base]# git branch
* master
  test
    
#删除分支还可以使用-D 强制删除

2.删除远程分支

[root@node3 base1]# git push origin --delete test
test1@192.168.1.107's password: 
To test1@192.168.1.107:/data/base1
 - [deleted]         test
 #服务端口的分支会被删除,本地的还需要手动删除
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
git本地分支远程分支是在版本控制系统Git中的两种类型的分支。本地分支是在本地仓库中创建和管理分支,而远程分支是在远程仓库中创建和管理分支。它们之间可以建立映射关系以便进行推拉操作。 可以使用以下命令来查看本地分支远程分支的映射关系:git branch -vv。这个命令可以显示本地分支远程分支之间的关系。如果本地分支没有和远程分支建立关系,那么就无法进行推拉操作。 要在本地创建一个和远程分支一样的分支,可以使用以下命令:git checkout --track -b localBranchName origin/remoteBranchName。这个命令会创建一个新的本地分支,并将其与指定的远程分支关联起来。 如果要切换到远程分支并跟踪它,可以使用以下命令:git checkout --track -b origin/remoteBranchName。这个命令会创建一个新的本地分支,并将其与指定的远程分支关联起来。 另外,如果在远程仓库中已经创建了一个分支,可以使用以下命令将其检出到本地:git checkout -b feature-branch origin/feature-branch。这个命令可以将指定的远程分支检出到本地仓库中的一个新分支。 总结来说,本地分支远程分支Git中两种不同类型的分支,可以通过合适的命令来建立它们之间的映射关系,以便进行推拉操作和分支管理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [git:本地分支远程分支](https://blog.csdn.net/zhizhengguan/article/details/113174482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值