如何将单个提交(没有子提交)推送到不同的存储库?

时间:2016-06-23 10:56:00

标签: git

说我有:

Node

我想将(提交5)推送到不同的repo而不提交2,3,4。这可能吗?

我之所以需要它:

我有两个项目:

  • 一个初学者项目(Starter)。
  • 目前正在进行的项目(Project-1)建立在(Starter)之上。

在处理我的(Project-1)时,我可能需要对(Starter)进行一些更改。

我目前拥有的是2个遥控器(Project-1):

  • No implicit format for Option[Seq[Node]] available. [error] implicit lazy val formatter = Json.format[Node] 指向私有(Project-1)存储库。
  • Commit 5 < HEAD Commit 4 Commit 3 Commit 2 Commit 1 指向开源(Starter)存储库。

通常在(Project-1)工作时,我将所有提交都推送到原始主分支。

但是,当我对(Starter)进行更改时,我单独提交它们,并尝试将该特定提交origin推送到(Starter)存储库。这工作正常!使用starter

但问题是,当我按Commit 5时,它也会推送所有先前的提交(2,3,4),在我的情况下,它与(Project-1)相关。

逻辑上是否可以仅推送特定提交,即使它不是最后一个提交。示例将git push starter c78d92e32ec1a:master与(Starter)repo。

合并

2 个答案:

答案 0 :(得分:2)

Git非常适合你想要达到的目标,但我担心你应该重新整理一下。

根据您问题中的信息,您只有一个分支和两个遥控器用于两个不同的项目。你想要两个不同的分支。

首先查看没有Project-1父项提交的最新启动提交。

git checkout Commit1SHA

为您的初学者项目创建一个新分支,并将其设置为跟踪入门者。

git checkout -b stmaster
git branch stmaster -u starter/master

仅限这一次,我们可以用樱桃镐修剪树木,但事情会变得更加清洁。

git cherry-pick Commit5SHA

现在推送只会将提交1和5发送给启动器

git push

从这里开始,您将设置一个良好的rebase策略,以保持您的合并线整洁。您可以继续处理Project 1,进行提交,并正常推送。

git checkout master
echo "hello world" > newfile.txt
git add .
git commit -m "create hello world"
git push

现在,当您想要对启动器进行更改时,请检查该分支是否正常工作。

git checkout stmaster
echo "starter changes" > more.txt
git add .
git commit -m "create more changes"
git push

现在将这些更改重新绑定到项目1中以保持提交行。

git checkout master
git rebase stmaster
git push

答案 1 :(得分:0)

  

OMG它的工作

  • 选择以下选项之一:
    • 选项1:从头开始
      • 克隆启动器 - 将源远程设置为启动器存储库URL。
    • 选项2:已经有项目:
      • 克隆您的项目存储库(git clone git@bitbucket.org:username / project.git)
  • 添加启动器远程(git remote add starter git@github.com:username / starter.git)
  • 查看两个遥控器(git remote -v)
  • composer install“被git忽略,所以你在切换分支时会看到相同的文件,会读到composer.json并安装所需的东西&#34;
  • 添加.env文件“被git忽略,这样你在转换分支时会看到相同的文件&#34;
  • 结帐新的“首发&#34;分支(git checkout -b starter)
    • 查看两个分支(git branch -v)
    • 从起始分支(git fetch --all)
    • 中获取所有内容
    • 使用启动器repo覆盖启动器分支“在启动分支中具有启动器存储库的完全副本&#34; (git reset --hard starter / master)
    • 确保starter分支包含来自starter存储库(git pull starter master)的最新更改
  • 签出主分支(git checkout master)

    • 通常在主分支上工作

      • 处理项目代码和提交。
        • 在您想要项目的远程存储库(git push origin master)时推送您的提交“或任何其他分支&#34;
      • 处理入门代码并提交#34;代码中可重用且有益于启动程序的部分“{小心永远不要将项目代码包含在启动器提交中}

        • 准备好看魔术!

          • 结帐启动分支(git checkout starter)
          • 从其主存储库(git pull starter master)更新启动器
          • cherry从首发中选择你的提交“当你在主分支上时,从(git log)中找到提交ID”(git cherry-pick 98a3d7g4h2dfs)
          • 看到提交都很好并准备推送(git log)
          • 将启动器推送到其存储库中的新分支(git push starter starter:feature-branch-name)“重要的是推送到分支机构,而不是直接掌握&#34;
          • 从github创建PR并随时将其合并
          • 如果您在上一步中合并,则执行合并提交(git pull starter master)
    • (可选)使用以下任一选项将启动器与项目合并:
      • 选项1:合并并保持项目更改(git merge -X our starter)
      • 选项2:合并并用启动器覆盖您的项目(git merge -X theirs starter)
      • 选项3:手动合并并解决冲突(git merge starter)