Git 远程仓库及分支管理

Git 远程仓库及分支管理_第1张图片
Git 远程仓库及分支管理目录.png

前提:已有远程仓库项目

远程仓库信息:

来源:github
远程仓库(YOUR_FORK)地址: https://github.com/zhengjiaao/YOUR_FORK.git
YOUR_FORK仓库已有分支: master、dev、pro

电脑安装:git (可以百度"git 安装")

1、下载远程仓库、切换分支、新增文件上传到远程分支

流程:复制远程仓库地址-->git 克隆远程仓库项目到本地-->创建本地dev分支与远程dev分支关联并切换至本地dev分支-->修改dev分支的文件内容-->git add .:保存缓存中-->commit:提交到本地-->git push:上传到远程dev分支上

下拉远程仓库到本地(默认master分支):

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub
#下拉仓库到本地
$ git clone https://github.com/zhengjiaao/YOUR_FORK.git

进入YOUR_FORK项目-->打开git bash:

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#创建本地dev分支与远程dev分支关联并切换至本地dev分支
$ git checkout -b dev origin/dev
Switched to a new branch 'dev'
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
$

新增文件-->推送到远程dev分支上

添加一个文件测试:在项目根目录下添加 "这是dev新增文件.txt" 的文件,也可以是修改的文件内容。

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
#把本地所有untrack(修改、新增)的文件都加入暂存区
$ git add .

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
#将暂存区内容保存到本地仓库 并注释
$ git commit -m "dev:新增 这是dev新增文件.txtx 的文件"
[dev 2a0c785] dev:新增 这是dev新增文件.txt 的文件
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 "\350\277\231\346\230\257dev\346\226\260\345\242\236\346\226\207\344\273\266.txt"

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
#将刚刚保存到本地的内容 提交到远程仓库,这里提交的是远程仓库的dev分支上
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 325 bytes | 65.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/zhengjiaao/YOUR_FORK.git
   030464a..2a0c785  dev -> dev

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
#查看提交日志
$ git log
commit 2a0c78535c80e1cafb325ad5d0de05b4d4b97ae0 (HEAD -> dev, origin/dev)
Author: Zhengjiaao <[email protected]>
Date:   Tue Oct 15 14:18:51 2019 +0800
    dev:新增 这是dev新增文件.txt 的文件
#键盘在英文输入法下 按 Q 退出日志查看

具体代码:方便查看

#把本地所有untrack(修改、新增)的文件都加入暂存区
$ git add .

#将暂存区内容保存到本地仓库 并注释
$ git commit -m "dev:新增 这是dev新增文件.txtx 的文件"

#将刚刚保存到本地的内容 提交到远程仓库,这里提交的是远程仓库的dev分支上
$ git push

#查看提交日志
$ git log

#键盘在英文输入法下 按 Q 退出日志查看

去github上查看:发现此时dev分支根目录下-->多了一个文件 “这是dev新增文件.txt”

2、下载远程仓库、创建本地分支推送到远程仓库、删除分支

流程:复制远程仓库地址-->git 克隆远程仓库项目到本地-->创建一个本地test分支-->推送到远程仓库里-->删除创建的test本地分支和远程分支

下拉远程仓库到本地(默认master分支):

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub
#下拉仓库到本地
$ git clone https://github.com/zhengjiaao/YOUR_FORK.git

进入YOUR_FORK项目-->打开git bash:

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#查看所有分支,现在是在master分支上
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/pro

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#根据master分支 创建本地仓库test分支
$ git branch test

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#查看所有分支,可以看出,新增了一个本地分支test,但远程还没有test分支
$ git branch -a
* master
  test
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/pro

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#切换至本地test分支
$ git checkout test
Switched to branch 'test'

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (test)
#将本地test分支推送至github的远程仓库中
$ git push origin test
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'test' on GitHub by visiting:
remote:      https://github.com/zhengjiaao/YOUR_FORK/pull/new/test
remote:
To https://github.com/zhengjiaao/YOUR_FORK.git
 * [new branch]      test -> test

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (test)
#查看所有分支,可以看出,远程仓库中新增了一个远程分支remotes/origin/test
$ git branch -a
  master
* test
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/pro
  remotes/origin/test

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (test)
#切换至master分支
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#删除本地test分支
$ git branch -d test
Deleted branch test (was 4d38ead).

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#查看所有分支:发现已找不到本地的test分支
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/pro
  remotes/origin/test

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#删除github上的远程test分支
$ git push origin :test
To https://github.com/zhengjiaao/YOUR_FORK.git
 - [deleted]         test

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
#查看所有分支:发现已找不到远程仓库中的test分支
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/pro

具体代码:方便查看

#查看所有分支,现在是在master分支上
$ git branch -a

#根据master分支 创建本地仓库test分支
$ git branch test

#查看所有分支,可以看出,新增了一个本地分支test,但远程还没有test分支
$ git branch -a

#切换至本地test分支
$ git checkout test

#将本地test分支推送至github的远程仓库中
$ git push origin test

#查看所有分支,可以看出,远程仓库中新增了一个远程分支remotes/origin/test
$ git branch -a

#切换至master分支
$ git checkout master

#删除本地test分支
$ git branch -d test

#查看所有分支:发现已找不到本地的test分支
$ git branch -a

#删除github上的远程test分支
$ git push origin :test

#查看所有分支:发现已找不到远程仓库中的test分支
$ git branch -a

3、创建本地仓库->关联单个远程仓库->下拉远程仓库中的指定分支

流程: 创建本地仓库-->关联远程仓库-->下拉远程仓库的指定分支-->修改文件内容-->git add .:保存缓存中-->commit:提交到本地-->git push:上传到远程分支上

创建一个test_Pro文件夹,只下拉远程的pro分支,没有master、dev分支

#创建一个文件夹,并进入文件夹
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro
#初始化git,会在文件夹中出现 .git文件
$ git init
Initialized empty Git repository in J:/IdeaTestProject/GitHub/test_Pro/.git/

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
#查看所有远程仓库
$ git remote -v

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
#添加远程仓库地址
$ git remote add origin https://github.com/zhengjiaao/YOUR_FORK.git

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
#查看所有远程仓库,可以看出已经添加了远程仓库地址
$ git remote -v
origin  https://github.com/zhengjiaao/YOUR_FORK.git (fetch)
origin  https://github.com/zhengjiaao/YOUR_FORK.git (push)

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
#查案所有分支:发现没有任何分支,也没有远程的分支,但是远程仓库里是有分支的:pro、master、dev
$ git branch -a

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
#下拉远程仓库pro分支信息:只是拉取分支信息,并没有拉取代码下来
$ git fetch origin pro
remote: Enumerating objects: 61, done.
remote: Counting objects: 100% (61/61), done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 61 (delta 25), reused 48 (delta 12), pack-reused 0
Unpacking objects: 100% (61/61), done.
From https://github.com/zhengjiaao/YOUR_FORK
 * branch            pro        -> FETCH_HEAD
 * [new branch]      pro        -> origin/pro

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
#查案所有分支:发现已有远程的pro分支
$ git branch -a
  remotes/origin/pro

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
#创建本地pro分支和远程pro分支关联,并切换至本地pro分支上
$ git checkout -b pro origin/pro
Switched to a new branch 'pro'
Branch 'pro' set up to track remote branch 'pro' from 'origin'.

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
#查看所有分支:多了一个本地pro分支
$ git branch -a
* pro
  remotes/origin/pro

#修改pro分支中的"your_fork-fork10.txt"文件内容-->提交到远程分支上
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
$ git add .

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
$ git commit -m "pro分支:修改了your_fork-fork10.txt 文件内容"
[pro 263c33d] pro分支:修改了your_fork-fork10.txt 文件内容
 1 file changed, 1 insertion(+)

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 324 bytes | 324.00 KiB/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/zhengjiaao/YOUR_FORK.git
   68cfab5..263c33d  pro -> pro

Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
$

4、创建本地仓库->关联多个远程仓库->与每个仓库的分支做关联

这里举个例子:两个远程仓库的分支同步部分数据:

仓库信息:A远程仓库和B远程仓库的分支,github:B仓库是从A仓库Fork出来的,且删除了B仓库的dev分支

A远程仓库地址:https://github.com/zhengjiaao/YOUR_FORK.git
A远程仓库所有分支:
remotes/origin/dev
remotes/origin/master
remotes/origin/pro

B远程仓库地址:https://github.com/zhengjiaao/YOUR_FORK_pro.git
B远程仓库所有分支:
remotes/origin/master
remotes/origin/pro

假如:A远程仓库的pro分支commit 10次,B远程仓库pro分支commit 5次

要求:
1、A远程仓库的pro分支commit 第2次提交的内容 同步到B远程仓库的pro分支中
2、B远程仓库的pro分支第3次commit内容提交到 A远程仓库的pro分支中

思路:创建本地仓库,且与多个远程仓库关联,再关联远程分支

方式:创建一个本地仓库YOUR_FORK_AB_pro文件夹,git init初始化并分别关联'B远程仓库的pro分支和关联A远程仓库的pro分支',B_pro,A_pro

#初始化your_fork_AB_pro本地仓库
$ git init
#关联多个远程仓库
$ git remote add A https://github.com/zhengjiaao/YOUR_FORK.git
$ git remote add B https://github.com/zhengjiaao/YOUR_FORK_pro.git

#查看本地仓库关联的所有远程仓库地址
$ git remote -v

#更新远程仓库数据信息到本地仓库your_fork_AB_pro,不是将远程仓库代码下拉到本地
$ git fetch A pro
$ git fetch B pro

#分别创建本地分支且关联的远程分支 A_pro 和 B_pro
$ git checkout -b A_pro A/pro
$ git checkout -b B_pro B/pro

#查看所有分支
$ git branch -a
  A_pro
* B_pro
  remotes/A/dev
  remotes/A/master
  remotes/A/pro
  remotes/B/pro

现在本地仓库有两个分支A_pro和B_pro,我们就可以对这两个分支进行操作,例如:合并操作-->合并某次的commit,合并某个文件或文件夹等

例如:合并本地分支的某个文件或文件夹
#合并本地分支的某个文件或文件夹

#如:想要将分支B_pro下public文件下所有文件和view下index.html文件合并到分支A_pro
#首先切换到A仓库的分支A_pro
$ git checkout A_pro
#合并B仓库的B_pro分支, 注意:因为public下可能有多层目录,所有不能使用public/*
$ git checkout B_pro public/** view/index.html
例如:合并某次的commit提交内容
#合并某次的commit提交内容

#例如:将A_pro分支某次commit提交的内容合并到B_pro
#切换到A_pro分支 
$ git checkout A_pro
#查看A_pro分支 commit提交的日志
$ git log
commit 68cfab5b9c4b536b6d42117d476308685fbef7ad (HEAD -> A_pro, A/pro)
Author: Zhengjiaao <[email protected]>
Date:   Tue Oct 15 09:53:16 2019 +0800
    your_fork:新增fork10文件

commit 3c03d1c376ccc8c58d1f232c5e0f57cdeba8df53
Author: Zhengjiaao <[email protected]>
Date:   Tue Oct 15 09:52:46 2019 +0800
    your_fork:新增fork9文件
    
commit a1ad40b91d87e4ec30c869e404fabca56a7e47ea
Author: Zhengjiaao <[email protected]>
Date:   Tue Oct 15 09:52:23 2019 +0800

    your_fork:新增fork8文件

#退出日志 英文状态下按Q

#将A_pro分支 ‘新增fork9文件’这次commit提交的内容 合并到B_pro
#切换到B_pro分支 
$ git checkout B_pro
#选择A_pro分支 ‘新增fork9文件’这次commit的id合并到B_pro分支上,当然不会把A_pro分支 ‘新增fork9文件’commit之前的,也就是‘新增fork8文件’这次commit所提交的文件包含在内,仅合并"新增fork9文件"的commit。
$ git cherry-pick 3c03d1c376ccc8c58d1f232c5e0f57cdeba8df53

B仓库的B_pro分支合并A仓库的A_pro分支某次commit的效果图:

Git 远程仓库及分支管理_第2张图片
git合并分支效果.png

你可能感兴趣的:(Git 远程仓库及分支管理)