Git:推送到不同的远程分支

时间:2013-07-09 09:02:58

标签: git github

问题:

需要将更改从本地git分支推送到另一个远程git存储库分支,并且推送到分支的这些更改将与远程URL中存在的主服务器进行比较,并且更改将合并。

步骤

我到目前为止已经创建了一个本地git存储库,

使用下面的命令

初始化一个简单的本地git repo
 git init

将现有文件添加到存储库,并使用以下命令将其添加到暂存区域

MacBook-Pro: $ git add *.h
MacBook-Pro: $ git add *.m

使用以下命令

检查状态
MacBook-Pro: $ git status

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   test.h
#   new file:   test.m
#

致力于他们,

git commit -m"Added test base files"

现在创建了一个名为issue_fix的新分支,

   MacBook-Pro:$ git branch issue_fix

通过检查分支机构开始在分支机构工作。

MacBook-Pro: $ git checkout issue_fix

对分支机构做了很少的提交。一切都很好。

现在我处于这样一种情况,我需要将我对'issue_fix'分支所做的更改推送到这样的远程存储库URL

    https://github.com/myaccountname/project.git

我的更改将被推送到给我的分支名称,或者如果分支不可用,我需要创建一个远程分支并将我在本地分支中的更改推送到该分支。

最重要的推送更改将与给定存储库URL中的master进行比较,如果一切正常,它将与master合并。因此,我将始终将我的更改从本地推送到远程分支。

问题发生的原因是我在开始时没有给出克隆URL,只提供了源代码,因此我创建了一个本地git存储库并开始处理,现在提供了存储库URL并要求将我的更改推送到分支

我想知道,在第一种情况下这是否可行?。如果可能的话,请给我一些命令,让它运转起来。

3 个答案:

答案 0 :(得分:4)

要解决这个问题(我之前也遇到过这些问题。他们已经死了很烦)你可以尝试做以下事情:

您的情况

主存储库

A-B-C-D-E-F-G-H

您的存储库

            A'-B'-C'-D'

G中的代码与本地A'中的代码相同,但它们不共享相同的历史记录

克隆要将更改推送到

的存储库
git clone https://....

这将为您提供代码库的工作副本,更重要的是,还将提供其历史记录。

主存储库的克隆

A-B-C-D-E-F-G-H

在与您的repo不同的文件夹中

            A'-B'-C'-D'

从混乱的存储库中获取您的功能分支。

git fetch ../messed-up-repo

其中../messed-up-repo是第二个存储库的路径。

这将从其他仓库中提取所有更改,而不合并它们。原因是你的分支机构找不到与主分支共同的祖先,因此将它们合并起来很困难甚至不可能。

主存储库现在看起来像这样:

 A-B-C-D-E-F-G-H                       # master
/
\
 ------------A'-B'-C'-D'               # messy

创建新分支

git branch new-featurebranch aabbccdd

其中aabbccdd是您下载存储库时的提交ID。这将在您下载的提交中创建一个新分支。你猜得越好 价值,你以后会有更少的冲突。

                -                        # new branch
              /
 A-B-C-D-E-F-G-H                         # master
/
\
 ------------A'-B'-C'-D'                 # messy

以交互方式将您的分支变为

git checkout messy-featurebranch
git rebase -i new-featurebranch

这将显示一个编辑器,其中包含分支中所有提交的列表。第一个可能是“我下载了代码的副本,但没有正确克隆它”提交。 删除该行。然后,所有其他提交都应无缝应用。

               -B'-C'-D'                 # new branch
              /
 A-B-C-D-E-F-G-H                         # master
/
\
 ------------A'                          # messy

答案 1 :(得分:3)

Git在大多数业务中分发并在本地工作;在本地创建分支或提交时,远程是否存在并不重要。当你进行推动时,它必须存在。

因此,您可以添加远程存储库,然后将分支推送到它。如果分支不存在,将远程创建分支。

git remote add github-repo https://github.com/myaccountname/project.git
git push github-repo issue_fix

答案 2 :(得分:0)

由于它似乎是一个非常少的版本,我建议只是克隆主要仓库(在新目录中),然后用自己的文件覆盖它们的文件并进行新的提交。

否则没有“简单的方法”来做,但可能有一些提示:

  1. 克隆到主目录https://github.com/myaccountname/project.git
  2. 的新目录中
  3. 将您的旧工作副本添加为远程:git remote add old /path/to/old/repo/
  4. git fetch`将导入所有修改
  5. 现在有几个选项,根据最适合您的方式:git cherry-pick <1st sha1 you want>..<last commit (probably old/issue_fix)>似乎符合您的需求,但如果不是,您可以尝试git rebase --interactive Nils,但如果你做的第一次提交不是空提交。