說明:
整理一份github的fork的用法,以及相關的操作命令姓惑,重點是在于fork完成了之后操灿,兩個倉庫之間如何同步代碼搀庶,如何保持代碼相同
比如倉庫A和倉庫B拐纱,B是從A上面fork出來的,然后分別在A,B進行了開發(fā):
1.這個時候想把A,B之間的修改相互同步
2.如果A修改了10個哥倔,只想同步5個到B秸架,怎么操作
3.B修改了10個,想同步3個到A 咆蒿,怎么操作
需求:團隊里推了使用github這種網(wǎng)站來協(xié)同開發(fā)东抹,但是出現(xiàn)了個問題:fork后的代碼無法 與源分支代碼同步,導致fork分支的代碼只有自己寫的那部分沃测,而不是各個分支merge之后的版本
源項目(ORIGINAL_REPOSITORY):https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
Fork后的項目(YOUR_FORK):https://github.com/zhengjiaao/YOUR_FORK.git
一缭黔、兩個倉庫之間如何同步代碼,如何保持代碼相同
方式一:在源A倉庫或Fork的B倉庫上執(zhí)行同步
1蒂破、將源項目代碼同步到Fork出來的個人項目上:
代碼:
#拉取Fork出來的分支
git clone Fork的分支url
#注意:進入項目根目錄馏谨,執(zhí)行下面操作
#查看所有遠程庫(remote repo)的遠程url
git remote -v
#添加源分支url
git remote add upstream 替換成源項目url
#查看所有遠程庫(remote repo)的遠程url
git remote -v
#從源分支獲取最新的代碼
git fetch upstream
#切換到主分支
git checkout master
#合并本地分支和源分支,本地庫和遠程的github原倉庫同步
git merge upstream/master
#push到fork分支,本地的倉庫提交到github
git push origin master
演示:
源項目的倉庫(ORIGINAL_REPOSITORY)添加fork文件,將fork文件同步到fork后的項目倉庫(YOUR_FORK)上
下拉 fork后的倉庫 'YOUR_FORK' 代碼
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (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/YOUR_FORK (master)
$ git remote add upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git remote -v
origin https://github.com/zhengjiaao/YOUR_FORK.git (fetch)
origin https://github.com/zhengjiaao/YOUR_FORK.git (push)
upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (push)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git fetch upstream
From https://github.com/zhengjiaao/ORIGINAL_REPOSITORY
* [new branch] master -> upstream/master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git merge upstream/master
Already up to date.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push origin master
Everything up-to-date
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push
Everything up-to-date
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git fetch upstream
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/zhengjiaao/ORIGINAL_REPOSITORY
eb3614a..92539d4 master -> upstream/master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git merge upstream/master
Updating eb3614a..92539d4
Fast-forward
fork.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 fork.txt
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 331 bytes | 331.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
eb3614a..92539d4 master -> master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$
同步后的效果圖:2寞蚌、將Fork出來的個人項目同步到源項目上:
代碼:
#拉取源項目分支
git clone 源項目分支url
#注意:進入項目根目錄田巴,執(zhí)行下面操作
#查看所有遠程庫(remote repo)的遠程url
git remote -v
#添加Fork分支url
git remote add upstream 替換成Fork分支url
#查看所有遠程庫(remote repo)的遠程url
git remote -v
#從源分支獲取最新的代碼
git fetch upstream
#切換到主分支
git checkout master
#合并本地分支和源分支,本地庫和遠程的github原倉庫同步
git merge upstream/master
#push到fork分支,本地的倉庫提交到github
git push origin master
演示:
fork后的項目的倉庫(YOUR_FORK)上添加fork2文件,將fork2文件同步到源倉庫(ORIGINAL_REPOSITORY)上
下拉 源倉庫'ORIGINAL_REPOSITORY' 代碼
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git remote -v
origin https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (fetch)
origin https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (push)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git remote add upstream https://github.com/zhengjiaao/YOUR_FORK.git
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git remote -v
origin https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (fetch)
origin https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (push)
upstream https://github.com/zhengjiaao/YOUR_FORK.git (fetch)
upstream https://github.com/zhengjiaao/YOUR_FORK.git (push)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git fetch upstream
From https://github.com/zhengjiaao/YOUR_FORK
* [new branch] master -> upstream/master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git merge upstream/master
Already up to date.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git push
Everything up-to-date
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git fetch upstream
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 2 (delta 1), reused 2 (delta 1), pack-reused 0
Unpacking objects: 100% (2/2), done.
From https://github.com/zhengjiaao/YOUR_FORK
92539d4..4a61703 master -> upstream/master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ git merge upstream/master
Updating 92539d4..4a61703
Fast-forward
fork2.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 fork2.txt
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$ 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), 287 bytes | 287.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/ORIGINAL_REPOSITORY.git
92539d4..4a61703 master -> master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/ORIGINAL_REPOSITORY (master)
$
同步后的效果圖:方式二:分別git push到A倉庫和B倉庫
1挟秤、將A倉庫代碼同步到Fork出來的B倉庫上:
代碼:
#拉取Fork出來的分支
git clone Fork的分支url
#注意:進入項目根目錄,執(zhí)行下面操作
#查看所有遠程庫(remote repo)的遠程url
git remote -v
#添加源分支url
git remote add upstream 替換成源項目url
#查看所有遠程庫(remote repo)的遠程url
git remote -v
#從源分支獲取最新的代碼
git fetch upstream
#切換到主分支
git checkout master
#合并本地分支和源分支,本地庫和遠程的github原倉庫同步
git merge upstream/master
#push到fork分支,本地的倉庫提交到github的B倉庫上
git push
#push到A遠程倉庫上
git push upstream master
演示:
源項目的倉庫(ORIGINAL_REPOSITORY)添加fork文件抄伍,將fork文件同步到fork后的項目倉庫(YOUR_FORK)上
下拉 fork后的倉庫 'YOUR_FORK' 代碼
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (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/YOUR_FORK (master)
$ git remote add upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git remote -v
origin https://github.com/zhengjiaao/YOUR_FORK.git (fetch)
origin https://github.com/zhengjiaao/YOUR_FORK.git (push)
upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (push)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git fetch upstream
From https://github.com/zhengjiaao/ORIGINAL_REPOSITORY
* [new branch] master -> upstream/master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git merge upstream/master
Already up to date.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push origin master
Everything up-to-date
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push
Everything up-to-date
修改B本地倉庫fork文件艘刚,將fork文件同步到B遠程倉庫和A遠程倉庫:
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git add .
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git commit -m "your_fork 修改fork文件"
[master 0b44e55] your_fork 修改fork文件
1 file changed, 8 insertions(+), 1 deletion(-)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 371 bytes | 371.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
4a61703..0b44e55 master -> master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push upstream master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 371 bytes | 185.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/ORIGINAL_REPOSITORY.git
4a61703..0b44e55 master -> master
可以看出我第一次是直接git push,沒有指定遠程庫名稱截珍,默認推送到了gitosc中攀甚,開始還以為一次性推送到了2個服務器呢,剩下的github需要指定名稱推送
反過來岗喉,也可以在將出來的ForkB倉庫代碼同步到A倉庫上
方式三:git push 一次性推送到A和B倉庫上(推薦)
找到項目根目錄下.git/config文件秋度,可以看到添加的有origin和upstream兩個倉庫。
config文件:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://github.com/zhengjiaao/YOUR_FORK.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "upstream"]
url = https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
fetch = +refs/heads/*:refs/remotes/upstream/*
移除倉庫:git remote rm 倉庫名稱
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git remote rm origin
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git remote rm upstream
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git remote add all https://github.com/zhengjiaao/YOUR_FORK.git
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git remote set-url --add all https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
config文件:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "all"]
url = https://github.com/zhengjiaao/YOUR_FORK.git
fetch = +refs/heads/*:refs/remotes/all/*
url = https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
修改fork文件內容钱床,測試一次性提交到兩個倉庫
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git add .
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git commit -m "測試git push all --all"
[master 069ffcf] 測試git push all --all
1 file changed, 1 insertion(+), 1 deletion(-)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push all -all
error: did you mean `--all` (with two dashes ?)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push all --all
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/zhengjiaao/YOUR_FORK.git
0b44e55..069ffcf master -> master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
0b44e55..069ffcf master -> master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$
提交成功!-->去github上查看兩個倉庫都有提交的信息荚斯。
方式四:一次性推送到A和B倉庫上(修改.git/config配置文件)
查看.git/config配置文件:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "all"]
url = https://github.com/zhengjiaao/YOUR_FORK.git
fetch = +refs/heads/*:refs/remotes/all/*
url = https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
刪除all
git remote rm all
查看.git/config配置文件:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
直接修改.git/config配置文件:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "all"]
url = https://github.com/zhengjiaao/YOUR_FORK.git
url = https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
修改fork文件內容,測試一次性提交到兩個倉庫
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git remote rm all
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git add .
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git commit -m "測試修改config配置文件"
[master e3c0277] 測試修改config配置文件
1 file changed, 1 insertion(+)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$ git push all --all
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 354 bytes | 354.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/zhengjiaao/YOUR_FORK.git
069ffcf..e3c0277 master -> master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 354 bytes | 354.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
069ffcf..e3c0277 master -> master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
$
上傳成功!
二、倉庫A和倉庫B只同步部分文件
比如倉庫A和倉庫B事期,B是從A上面fork出來的滥壕,然后分別在A,B進行了開發(fā):
1.這個時候想把A,B之間的修改相互同步
2.如果A修改了10個,只想同步5個到B兽泣,怎么操作
3.B修改了10個绎橘,想同步3個到A ,怎么操作
A遠程倉庫修改了10個唠倦,只想同步5個到遠程B倉庫
方式一:10個文件都上傳到A的遠程倉庫称鳞,然后同步5個指定文件到B的遠程倉庫
參考:下方的 三、git克隆或下載一個A倉庫單個文件夾稠鼻,并push到B倉庫里
方式二:10個文件只上傳5個指定的文件上傳到遠程A上冈止,然后遠A同步到遠程B上
參考:下方的 三、git克隆或下載一個A倉庫單個文件夾枷餐,并push到B倉庫里
三靶瘸、git克隆或下載一個A倉庫單個文件夾,并push到B倉庫里
倉庫(YOUR_FORK):https://github.com/zhengjiaao/YOUR_FORK.git
克隆文件:'YOUR_FORK/fork.txt' 或 克隆文件夾:'YOUR_FORK/文件夾/*' 是克隆'文件夾'下的所有文件
注意:.git/info/sparse-checkout文件每一行是一個文件或文件夾
使用:echo 'fork.txt' >> .git/info/sparse-checkout
echo '文件夾/*' >> .git/info/sparse-checkout
現(xiàn)在想只克隆YOUR_FORK/fork.txt文件毛肋,本地新建一個文件test文件夾:
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git init
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git config core.sparsecheckout true
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ echo 'fork.txt' >> .git/info/sparse-checkout
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git remote add origin https://github.com/zhengjiaao/YOUR_FORK.git
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git pull origin master
效果:克隆一個文件成功!
下面將這個fork.txt文件git push 到自己的github倉庫上
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (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 (master)
$ git remote add upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git remote -v
origin https://github.com/zhengjiaao/YOUR_FORK.git (fetch)
origin https://github.com/zhengjiaao/YOUR_FORK.git (push)
upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (fetch)
upstream https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git (push)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git fetch upstream
From https://github.com/zhengjiaao/ORIGINAL_REPOSITORY
* [new branch] master -> upstream/master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git fetch upstream
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git checkout master
Already on 'master'
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git merge upstream/master
Already up to date.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git push upstream master
Everything up-to-date
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git checkout master
Already on 'master'
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git merge upstream/master
Already up to date.
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git pull origin master
From https://github.com/zhengjiaao/YOUR_FORK
* branch master -> FETCH_HEAD
Updating e3c0277..b407bf8
Fast-forward
fork.txt | 1 +
fork2.txt | 3 +++
2 files changed, 4 insertions(+)
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git push upstream master
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 459 bytes | 229.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/zhengjiaao/ORIGINAL_REPOSITORY.git
e3c0277..b407bf8 master -> master
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$
注意:第一次克隆了文件怨咪,如果還想再克隆其它的文件,則需要克隆的項目有提交記錄润匙,不然無法再次克隆成功!
提示:
Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test (master)
$ git pull origin master
From https://github.com/zhengjiaao/YOUR_FORK
branch master -> FETCH_HEAD
Already up to date.
四诗眨、倉庫源A和Fork的倉庫B 只同步部分文件
說明:A遠程倉庫和B遠程倉庫的分支,github:B倉庫是從A倉庫Fork出來的孕讳,且刪除了B倉庫的dev分支
A遠程倉庫所有分支:
remotes/origin/dev
remotes/origin/master
remotes/origin/proB遠程倉庫所有分支:
remotes/origin/master
remotes/origin/pro
假如:A遠程倉庫的pro分支commit 10次匠楚,B遠程倉庫pro分支commit 5次
要求:
1、A遠程倉庫的commit 第2次提交的內容 同步到B遠程倉庫
2厂财、B遠程倉庫的第3次commit內容提交到 A遠程倉庫中
思路:創(chuàng)建本地倉庫芋簿,且與多個遠程倉庫關聯(lián),再關聯(lián)遠程分支
方式:創(chuàng)建一個本地倉庫YOUR_FORK_AB_pro璃饱,git init初始化并分別關聯(lián)'B遠程倉庫的pro分支和關聯(lián)A遠程倉庫的pro分支'与斤,B_pro,A_pro
#初始化your_fork_AB_pro本地倉庫
$ git init
#關聯(lián)多個遠程倉庫
$ git remote add A https://github.com/zhengjiaao/YOUR_FORK.git
$ git remote add B https://github.com/zhengjiaao/YOUR_FORK_pro.git
#查看本地倉庫關聯(lián)的所有遠程倉庫地址
$ git remote -v
#更新遠程倉庫數(shù)據(jù)信息到本地倉庫your_fork_AB_pro,不是將遠程倉庫代碼下拉到本地
$ git fetch A pro
$ git fetch B pro
#分別創(chuàng)建本地分支且關聯(lián)的遠程分支 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
現(xiàn)在本地倉庫有兩個分支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 <1263598336@qq.com>
Date: Tue Oct 15 09:53:16 2019 +0800
your_fork:新增fork10文件
commit 3c03d1c376ccc8c58d1f232c5e0f57cdeba8df53
Author: Zhengjiaao <1263598336@qq.com>
Date: Tue Oct 15 09:52:46 2019 +0800
your_fork:新增fork9文件
commit a1ad40b91d87e4ec30c869e404fabca56a7e47ea
Author: Zhengjiaao <1263598336@qq.com>
Date: Tue Oct 15 09:52:23 2019 +0800
your_fork:新增fork8文件
#退出日志 英文狀態(tài)下按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的效果圖: