我如何重新发挥我的提交的本地内容代码顶上的一个项目,我在分叉github.com?

StackOverflow https://stackoverflow.com/questions/1457248

  •  12-09-2019
  •  | 
  •  

是的,我知道我应该只是分叉的项目从一开始,但这是什么情况下我是在现在。:)

我有一个地方Git库,其中包含我的博客上我的地方计算机,这有几个月的承诺的历史。最初,我只是下载的文件从仓库 http://github.com/mojombo/mojombo.github.com, 和我继续在与我的本地内容代码与第一提交看起来像最新的文件,从mojombo的储存库。

我现在想到叉的项目,并有我的地方Git仓库,承诺进行重播在它的上面,所以它看起来像我的叉的项目从一开始,然后推回到我的分叉的版本mojombo的储存库,在我审查的账户:

http://github.com/program247365/mojombo.github.com

因此,或许历史上会再看看这样的:

mobjombo repository:         1---2---3----23
                                  \
my blog repository commits:       24---25---

什么内容可以我用的正是要这么做吗?

我已经看过了 这个问题.我会得到加mojombo的储存库,作为一个远为我的项目,然后把它中、合并、解决冲突,然后推到我的分叉的项目想?

有帮助吗?

解决方案 2

当我试图git pull它给我的以下错误:

$ git pull grid master:master
! [rejected]        master     -> master  (non fast forward)

在我的特殊情况下,它似乎是git rebase是去我的方式,如通过这里的步骤:

#Clone my forked project from github
git clone git@github.com:program247365/mojombo.github.com.git 

#Add my repo as a remote repo, with the alias 'grid'
git remote add grid "path/to/remote/gitrep/with/all/history/unrelated/to/mojombo/" 

#Rebase my commits on top of mojombo's
git rebase master grid/master

#Switch to the local master branch 
git checkout master

#Call up my mergetool via git, to start rectifying the conflicts that emerge between my repo, and mojombo's
git mergetool

#Push my rebased/combined repo back to Github.com
git push github

其他提示

在短:

一个解决方案是以使用 移植物 连接的历史,那么使用 git filter-branch 改写历史根据这些移植,那么任选做 合并.

注意,方案重你的变动(提交)上的新发展的原始存储库(本 变基 解决方案)是另一个可行的解决方案。


再版:

让我们假设你要么请记住,或者你可以找到通过检查来源和/或使用内容的修订的储存库中下载的快照,并开始地方发展。让我们叫这个修订的开始或A.

让我们假设你的当地断的历史,是在克隆人的原始存储库。这意味着你的地方断发展是在同一个储存库,作为全部历史的一个项目。让我们假设你的当地分支机构都在支"主"(和为简单起见,只有一个分支)。

如果你没有获取的项目进入储存库,与当地断开工作,你可以做到这一点:

$ git remote add origin git://github.com/mojombo/mojombo.github.com.git
$ git fetch origin

历史上看起来现在如下:

*---*---*---*---*---A---*---*---*---*      <--- origin/master (remote-tracking branch)

                                     x---y---*---*---*      <--- master (your local disconnected history)

提交名为一个在上面图开始犯下载如快照,并开始你的地方发展的关闭。

有两种可能性:你必须提交的快照'A'作为初始提交'x',或第一个承诺是与当地的修改。

在第一种情况(你致力于原始状态,例如作为最初提交"或"进口')你将要连接的历史是这样的:

*---*---*---*---*---A---*---*---*---*      <--- origin/master (remote-tracking branch)
                                      \
                                        \-y---*---*---*       <--- master (your local disconnected history)

即你的第一个原始提交'y'有'A'作为父母。

在第二种情况下(你承诺与你的变化)你将要连接的历史是这样的:

*---*---*---*---*---A---*---*---*---*           <--- origin/master (remote-tracking branch)
                                      \
                                        \-x---y---*---*---*      <--- master (your local disconnected history)

即你想第一个承诺'x'必须'一个"作为父母。

在这两种情况下你想找到全SHA-1标识的犯'A'和全SHA-1标识符的承诺'x'和'y'。

你可以找到SHA-1提交的'A'(假设你不知道它已经)与 git rev-分析:

$ git rev-parse A     # or A^{commit}
437b1b20df4b356c9342dac8d38849f24ef44f27

(《'^{提交}'的后缀可能需要确保找到你 提交 沙-1,这是重要的,如果例如知道一个"通过其标签,例如'0.99';在你的情况这是不必要的,因为储存库的问题不使用标记)。

你可以找到SHA-1的承诺'x'和'y'使用 git转列表 (假设你的发展所做的分支"主"):

$ git rev-list --topo-order master | tail -2
8bc9a0c769ac1df7820f2dbf8f7b7d64835e3c68
e83c5163316f89bfbde7d9ab23ca2e25604af290

(该"| tail -2"在这里,以寻找最后的两次提交中产生的列表;你不需要使用它,如果你没有的话)。

注: 在所有上述例子充分SHA-1 , ,而不应被用作。

让我们的名字提交的你想要的'"(或'开始')作为父母作为第一(将"x"或"y",这取决于你的情况下,如上所述)。现在,我们使用 移植的机制 连接的历史:

$ echo "<SHA-1 of FIRST> <SHA-1 of START>" > .git/info/grafts

那么你应该看看如果你现在有正确地连接(加入)的历史,通过使用图形的历史浏览器,如gitk,或QGit,或GitX是你是mac os X,或甚至"git log --graph",或者"git show-branch",例如:

$ gitk master origin/master    # or --all

(其中gitk是在这里仅作为例子;如果使用"git show branch"你不总是可以使用'--all'选项)。

最后,我们可能想要使这些改变永久化,使任何人将获取从我们的库也将连接的历史。我们可以做到这一点通过使用 git过滤器的分支:

$ git filter-branch master

你会原来的(断)的历史,在'裁判/原始/。

现在你可以删除移植文件:

$ rm .git/info/grafts

现在你就可以合并在新的开发的原始存储库:

$ git merge origin/master

设立的每支配置,以便它能够做的只是"混帐拉"在树枝上的"主"拉(合并)改变原籍国(al)储存库的保留为行使读者...:-)


注:变基解决方案 将导致在以下历史记录(假设,我们有情况下第一次谢是简单的进口):

*---*---*---*---*---A---*---*---*---*                                      <--- origin/master (remote-tracking branch)
                                                                     \
                                                                       \-y'---*'---*'---*'      <--- master (your local disconnected history)

(在那里 y' 意味着承诺 y 是修改:它应当是相同的变更,但这是不同的,因为提交).

这里是认为你可以做的。这是一种相反的想法你总结底部的问题。

  1. 叉mojombo的回购在想.
  2. 克隆分叉的副本。
  3. 合并在您的变化,从现有(原文)储存库。
  4. 删除原来的储存库(如果需要的话,但你真的不需要它了).

所以基本上,后forking在想,你可能会使用的下列命令:

$ git clone git://github.com/$YOUR_USERNAME/$YOUR_PROJECT.git  # Clone your GitHub fork (#2 from above)
$ git pull /path/to/your/original/repo master:master           # Clone your original repo's master branch into your new repo (cloned from GitHub)
$ rm -rf /path/to/your/original/repo                           # Might as well delete the original -- you don't need it anymore, since all your history is in your new repo

在摘要,这种方法将合并在所有变化你做的旧仓库(因而维护你的发展历史记录),同时还在拉mojombo的历史, 让你保持与mojombo的变化/容易地做出贡献的变化回到他的回购,如果适用的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top