如何从另一个具有不同历史记录的存储库重新提交提交?
How to rebase commits from another repository with a different history?
我们有两个 Git 存储库。
存储库 1。提交:A、B、C。此存储库是根据 SVN 历史记录创建的。
Repo 2. 提交:D、E、F。这个存储库是在没有 SVN 历史记录的情况下创建的,只是使用工作副本(从提交 C 开始)成为提交 D。换句话说,文件树提交 C 和 D 是相同的。
现在,我们想要合并两个存储库,以便我们在一个存储库中拥有完整的历史记录。有没有办法 "copy/rebase/something else" 所有提交 E..F 到 C?
这些是远程存储库吗?如果 C 和 F 都在同一个本地存储库中,那么您应该能够将指向 F 的分支变基到指向 C 的分支上。如果不行,试试这个:
- 在 Repo1 本地 运行
一种。 git remote add repo2 <Repo 2 URL>
b. git push repo2 branchPointingToC
- 然后在 Repo2 本地 运行
一种。 git fetch
b. git checkout branchPointingToF
C。 git rebase -i remotes/origin/branchPointingToC
(N.B。如果你跟随 但想变基,你可以使用 git rebase -i repo2/master
代替他的 git cherry-pick
。)
最简单的做法是添加 Repo 2 作为 remote in Repo 1 using its physical path on disk and then simply cherry pick 在 [= 之上提交 E
和 F
16=].
所以,在 Repo 1 中你会做:
git remote add repo2 C:\Path\To\Repo2
git fetch repo2
然后,假设 E
和 F
是 Repo 2 和 [=16= 中 master
分支中的最新两个提交] 是 Repo 1 中 master
中的最新提交,如下所示:
master
/
A-B-C
repo2/master
/
D-E-F
你会做:
git checkout master
git cherry-pick repo2/master~2..repo2/master
这将在 C
之上应用提交 E
和 F
的补丁:
master
/
A-B-C-E'-F'
repo2/master
/
D-E-F
请注意,我在这里挑选 提交范围 ,这是受支持的 since Git 1.7.2。
我们有两个 Git 存储库。
存储库 1。提交:A、B、C。此存储库是根据 SVN 历史记录创建的。
Repo 2. 提交:D、E、F。这个存储库是在没有 SVN 历史记录的情况下创建的,只是使用工作副本(从提交 C 开始)成为提交 D。换句话说,文件树提交 C 和 D 是相同的。
现在,我们想要合并两个存储库,以便我们在一个存储库中拥有完整的历史记录。有没有办法 "copy/rebase/something else" 所有提交 E..F 到 C?
这些是远程存储库吗?如果 C 和 F 都在同一个本地存储库中,那么您应该能够将指向 F 的分支变基到指向 C 的分支上。如果不行,试试这个:
- 在 Repo1 本地 运行
一种。git remote add repo2 <Repo 2 URL>
b.git push repo2 branchPointingToC
- 然后在 Repo2 本地 运行
一种。git fetch
b.git checkout branchPointingToF
C。git rebase -i remotes/origin/branchPointingToC
(N.B。如果你跟随 git rebase -i repo2/master
代替他的 git cherry-pick
。)
最简单的做法是添加 Repo 2 作为 remote in Repo 1 using its physical path on disk and then simply cherry pick 在 [= 之上提交 E
和 F
16=].
所以,在 Repo 1 中你会做:
git remote add repo2 C:\Path\To\Repo2
git fetch repo2
然后,假设 E
和 F
是 Repo 2 和 [=16= 中 master
分支中的最新两个提交] 是 Repo 1 中 master
中的最新提交,如下所示:
master
/
A-B-C
repo2/master
/
D-E-F
你会做:
git checkout master
git cherry-pick repo2/master~2..repo2/master
这将在 C
之上应用提交 E
和 F
的补丁:
master
/
A-B-C-E'-F'
repo2/master
/
D-E-F
请注意,我在这里挑选 提交范围 ,这是受支持的 since Git 1.7.2。