【问题标题】:Copy chain of commits between repositories在存储库之间复制提交链
【发布时间】:2013-12-06 14:52:08
【问题描述】:

如何将一串提交从一个 git(或 svn)存储库复制到另一个?

如果我只有一次提交,我会这样做:

 cd Git1
 git diff commitHash^ commitHash > patch.txt
 cd Git2
 git branch CommitsFromGit1
 git checkout CommitsFromGit1
 patch -i ....Git1/patch.txt
 git ci -am "CommitFromGit1Name"

但是我的提交太多,无法一一手动进行。有没有办法通过一组提交更改来创建某种多补丁?

【问题讨论】:

  • Git1 和 Git2 是同一个仓库的两个克隆吗?
  • @Joucks,它们是两个具有共同来源的 svn 存储库的副本。我试图解决的原始问题在这里描述:stackoverflow.com/questions/20426269/…

标签: git svn version-control patch git-commit


【解决方案1】:

让我们调用你的 git A 和 B 并说你正在处理 master 分支。在 git A 中,将 B 添加为远程并将其内容提取到 A:

git remote add B /path/to/B
git fetch B

(您不必将其添加为远程;如果您愿意,您可以只做git fetch /path/to/B master:B/master。这会复制 B 中的所有分支,这在您的情况下可能是不必要的。随意指定一个明确的 refspec 来限制获取。)

现在您可以使用 git-cherrypick 将单个提交从 B 复制到 A,或使用 git rebase --onto 复制多个提交。后一个命令具有以下一般形式:

git rebase --onto destination boundary starting_point

Git 从starting_point 向后走,直到到达boundary 并将生成的提交(不包括boundary)复制到destination 的尖端。因此,这会将 B 的 master 分支中最近的三个提交复制到 A 的 master 分支:

git rebase --onto master B/master~3 B/master

【讨论】:

  • 我这样想rebase --ontogit rebase --onto <newbase> <oldbase> <head>。基本上,你是在呼唤你想要它的基地,然后是它当前所在的基地,然后是你正在移动的东西的尖端。 IE。 “为了这个东西,把基地换成那个基地,从这个基地到那个基地。”
猜你喜欢
  • 2015-01-09
  • 2013-11-12
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2018-10-23
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多