前提:已有远程仓库项目
远程仓库信息:
来源: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/proB远程仓库地址: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的效果图: