git 变基三个存储库
git rebase three repositories
我有我的本地开发分支 (local/dev)、原始存储库的主分支 (origin/master) 和我的远程开发分支 (remote/dev)。启动时,local/dev 和 remote/dev 同步。
现在我想从 origin/master 获取更改,用我的 local/dev 重新设置基准并将其推送到 remote/dev。
所以我在我的 local/dev 存储库中执行了 git pull --rebase origin master
,这似乎工作正常。
但是git status
returns我这个:
On branch dev
Your branch and 'remote/dev' have diverged,
and have 8 and 5 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean
和git push remote dev
将导致
To github.com:PascalTurbo/dev.git
! [rejected] logger -> logger (non-fast-forward)
error: failed to push some refs to 'git@github.com:PascalTurbo/dev.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
我该如何解决这个问题?
其实执行git pull --rebase origin master
的时候是不行的。让我们通过下图来说明(有两个存储库-local 和 origin,这也用于三个存储库):
A---B---C local/dev, origin/dev
/
D---E---F---G origin/master
git pull --rebase origin master
之后
A---B---C origin/dev
/
D---E---F---G---A’---B’---C’ local/dev
|
origin/master
所以真的是local/dev和remote/dev分道扬镳,并不是你真正想要的。
有一种方法可以让你实现你的需求:
- 将本地存储库恢复为远程。
git fetch remote
git reset --hard remote/dev
git pull origin
- 将 origin/master 更改放在 local/dev 分支的顶部。
git checkout master
git rebase dev
git checkout dev
git merge master
- 删除未使用的更改。
git branch –D master
- 将 local/dev 分支上的更改推送到 remote/dev。
git checkout dev
git push remote dev
我有我的本地开发分支 (local/dev)、原始存储库的主分支 (origin/master) 和我的远程开发分支 (remote/dev)。启动时,local/dev 和 remote/dev 同步。
现在我想从 origin/master 获取更改,用我的 local/dev 重新设置基准并将其推送到 remote/dev。
所以我在我的 local/dev 存储库中执行了 git pull --rebase origin master
,这似乎工作正常。
但是git status
returns我这个:
On branch dev
Your branch and 'remote/dev' have diverged,
and have 8 and 5 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean
和git push remote dev
将导致
To github.com:PascalTurbo/dev.git
! [rejected] logger -> logger (non-fast-forward)
error: failed to push some refs to 'git@github.com:PascalTurbo/dev.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
我该如何解决这个问题?
其实执行git pull --rebase origin master
的时候是不行的。让我们通过下图来说明(有两个存储库-local 和 origin,这也用于三个存储库):
A---B---C local/dev, origin/dev
/
D---E---F---G origin/master
git pull --rebase origin master
A---B---C origin/dev
/
D---E---F---G---A’---B’---C’ local/dev
|
origin/master
所以真的是local/dev和remote/dev分道扬镳,并不是你真正想要的。 有一种方法可以让你实现你的需求:
- 将本地存储库恢复为远程。
git fetch remote
git reset --hard remote/dev
git pull origin
- 将 origin/master 更改放在 local/dev 分支的顶部。
git checkout master
git rebase dev
git checkout dev
git merge master
- 删除未使用的更改。
git branch –D master
- 将 local/dev 分支上的更改推送到 remote/dev。
git checkout dev
git push remote dev