github fork后兩個倉庫之間如何同步代碼

git合并目錄.png

說明:

整理一份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)
$

同步后的效果圖:
your_fork_1.png

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)
$

同步后的效果圖:
original_repository_1.png

方式二:分別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

效果:
spatse-checkout.png

克隆一個文件成功!

下面將這個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/pro

B遠程倉庫所有分支:
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的效果圖:
git合并分支效果.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末善榛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叨叙,更是在濱河造成了極大的恐慌锭弊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擂错,死亡現(xiàn)場離奇詭異味滞,居然都是意外死亡,警方通過查閱死者的電腦和手機钮呀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門剑鞍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爽醋,你說我怎么就攤上這事蚁署。” “怎么了蚂四?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵光戈,是天一觀的道長。 經常有香客問我遂赠,道長久妆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任跷睦,我火速辦了婚禮筷弦,結果婚禮上,老公的妹妹穿的比我還像新娘抑诸。我一直安慰自己烂琴,他們只是感情好,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布蜕乡。 她就那樣靜靜地躺著奸绷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪层玲。 梳的紋絲不亂的頭發(fā)上健盒,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音称簿,去河邊找鬼。 笑死惰帽,一個胖子當著我的面吹牛憨降,可吹牛的內容都是我干的。 我是一名探鬼主播该酗,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼授药,長吁一口氣:“原來是場噩夢啊……” “哼士嚎!你這毒婦竟也來了?” 一聲冷哼從身側響起悔叽,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤莱衩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后娇澎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笨蚁,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年趟庄,在試婚紗的時候發(fā)現(xiàn)自己被綠了括细。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡戚啥,死狀恐怖奋单,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情猫十,我是刑警寧澤览濒,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站拖云,受9級特大地震影響贷笛,放射性物質發(fā)生泄漏。R本人自食惡果不足惜江兢,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一昨忆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杉允,春花似錦邑贴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至改基,卻和暖如春繁疤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秕狰。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工稠腊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸣哀。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓架忌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親我衬。 傳聞我的和親對象是個殘疾皇子叹放,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354