Git从一个分支移动到另一个分支

时间:2018-04-18 06:37:26

标签: git github

我是Git的新手,并没有为我想做的任务找到太多帮助。

我有一个master分支https://my.company.com/appid/WebApp/tree/DEV,我从中获取了代码并进行了大量修改。不幸的是,我无法将我的提交推回到它,我必须承诺一个完全不同的分支https://my.company.com/13179069/WebApp/tree/DEV,其中13179069是我工作场所的身份。我尝试使用GitHub桌面工具,但无济于事。

4 个答案:

答案 0 :(得分:1)

我认为您无法提交主分支意味着您无权这样做。

(i)在这种情况下,您应首先在https://my.comapny.com/appid/WebApp/tree/DEV上创建存储库的分支。您创建的fork将具有URL https://my.comapny.com/13179069/WebApp/tree/DEV,假设13179069也是您的GitHub ID。

Here是关于如何创建fork的文档,还是创建fork的本地克隆。

(ii)接下来,您可以使用git checkout -b <new_branch_name>在分叉上创建分支,然后进行所需的所有更改。也许只需从当前的未分支的非重制仓库中复制粘贴已更改的文件。

(iii)完成后,执行git status检查是否所有必需文件都已更改,然后git add <file_names>暂存其中一些文件,或git add .如果全部更改的文件属于一个提交。

(iv)现在,使用您的消息和/或签名进行git commit。如果您有更多提交,请通过执行(iii)

再次进行提交

(v)现在,您应该设置上游和原点。按照this执行此操作。

完成所有这些操作后,只需将您的分支推送到远程源git push -f origin <new_branch_name>,然后按照this创建对原始存储库的Pull Request。

具有合并权限的人员将您的提交合并到原始存储库的主服务器。希望这有帮助,如果您需要任何澄清,请告诉我。

答案 1 :(得分:1)

你混淆了一些事情。 https://my.company.com/appid/WebApp/tree/DEV不是“分支”。它是远程存储库的URL。 tree/DEV看起来无关紧要。此存储库可以包含多个分支,可以通过它公开。 HTTP(这就是它的外观)。从url看,开发完成的分支称为DEV。这是令人困惑的,因为你说你在master上有一些东西。你能用git branch命令仔细检查吗?让我重申一下你的情况,以确保我做对了。

  1. 您已从存储库克隆(我们称之为origin)。
  2. 对分支X进行了一些更改(我认为它是DEV,但你说它是master)。
  3. 无法将更新的X推回origin
  4. 想要将X推送到其他存储库https://my.company.com/appid/WebApp/tree/DEV(让我们称之为mine)。
  5. 如果这是您所需要的,您的问题很容易解决。您只需使用

    mine添加为新的遥控器即可
      git remote add mine https://my.company.com/13179069/WebApp/tree/DEV
    

    现在,您可以将分支推送到mine,如此

      git push mine X
    

    这是将同一分支推送到不同的远程

    如果是OTOH,你真的想将提交从一个分支转移到另一个,正如你在问题标题中所述(但我怀疑),你需要做以下事情。

    让我们假设从原始克隆时原始存储库看起来像这样。 C4是当前master的提交。

    C1 - C2 - C3 - C4 (master)
    

    现在你做了一些额外的提交,你的本地存储库看起来像这样

    C1 - C2 - C3 - C4 - C5 - C6 - C7(master)
    

    糟糕!这3个额外的提交应该进入另一个分支。首先,你要在此时创建一​​个分支dev

    git branch dev
    

    现在,看起来像这样

    C1 - C2 - C3 - C4 - C5 - C6 - C7(master, dev)
    

    现在,我们将master移回原点位置(C4)。

    git reset --hard master C4
    

    现在,看起来像这样

    C1 - C2 - C3 - C4(master) - C5 - C6 - C7(dev)
    

    现在,您可以将自己的存储库添加为新的远程(例如mine),然后像我上面提到的那样将dev推送到它。

答案 2 :(得分:0)

答案可能是一些特定的配置(github实例),具体取决于你的工作流程,但它听起来的方式,在你的情况下你应该把https://my.company.com/appid/WebApp/tree/DEV分叉到你自己的回购中。克隆,执行您的工作,提交,将您的更改推送到github中的repo,然后从您的repo向“主”仓库发出拉动请求。

旁注。关于原始问题中的术语似乎有些混乱。 git是分布式SCM。你承诺你的本地克隆(无论你的遥控器是什么,这很可能都有效,除非有额外的钩子到位)。我从提交中提取并将提交推送到远程仓库,这可能是您无法执行的步骤,因为您的工作流程希望您通过额外的跃点。

答案 3 :(得分:0)

您似乎没有在master分支中提交的权限。 但正如您所写,您已在master分支中进行了大量修改,现在您想在另一个分支中提交它。

您不必再次编写代码。 请按照以下步骤对您提供帮助。

  1. 使用以下命令存储当前更改。

    git stash

    上面的命令会将修改过的代码存储在临时内存中。

  2. 使用以下命令结帐到您的新分行。

    git checkout

  3. 使用以下命令将更改应用于当前分支。

    git stash apply

    以上命令将从临时内存中获取修改后的代码并应用于当前分支。

  4. 注意:确保您拥有在分支机构中提交代码的适当权限。