为了账号安全,请及时绑定邮箱和手机立即绑定

使用Git将最近的提交移动到新分支

使用Git将最近的提交移动到新分支

Git
青春有我 2019-06-28 15:08:29
使用Git将最近的提交移动到新分支我想将最后几次提交转移到一个新的分支,并在这些提交完成之前带Master回到新的分支。不幸的是,我的Git-fu还不够强大,有什么帮助吗?我该怎么做master A - B - C - D - E为了这个?newbranch     C - D - E              / master A - B
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

搬到一个新的分支机构

警告:此方法之所以有效,是因为您正在使用第一个命令创建一个新分支:git branch newbranch..如果要将提交移动到现有分支在执行之前,需要将更改合并到现有的分支中。git reset --hard HEAD~3(见转移到现有的分支(见下文)。如果您不首先合并您的更改,它们将丢失。

除非有其他情况涉及,这可以很容易地通过分支和回滚。

# Note: Any changes not committed will be lost.git branch newbranch      # Create a new branch, saving the desired commitsgit reset --hard HEAD~3   # Move master back by 3 commits (Make sure you know how many commits you need to go back)git checkout newbranch    # Go to the new branch that still has the desired commits

但一定要确定有多少人承诺回去。或者,你可以代替HEAD~3,只需提供提交的散列(或引用,如起源/主人)您希望在师父(目前)分支机构,例如:

git reset --hard a1b2c3d4

*1你会是“失败”从主分支提交,但别担心,你会有那些提交在新分支!

警告:使用GitVersion2.0及更高版本,如果您稍后git rebase原来的新分支(master)分支,您可能需要一个显式的--no-fork-point选项在重基期间避免丢失结转提交。有branch.autosetuprebase always这就更有可能了。看见约翰·梅勒的回答关于细节。

转移到现有的分支

如果要将提交移动到现有分支,看起来是这样的:

git checkout existingbranch
git merge master
git checkout master
git reset --hard HEAD~3 # Go back 3 commits. You *will* lose uncommitted work.git checkout existingbranch


查看完整回答
反对 回复 2019-06-28
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

对于那些想知道为什么会起作用的人(就像我刚开始那样):

你想回到C,把D和E移到新的分支。一开始是这样的:

A-B-C-D-E (HEAD)
        ↑
      master

git branch newBranch:

    newBranch
        ↓
A-B-C-D-E (HEAD)
        ↑
      master

git reset --hard HEAD~2:

    newBranch
        ↓
A-B-C-D-E (HEAD)
    ↑
  master

既然树枝只是一个指针,师父指向最后一次提交。当你新支,您只需创建一个指向最后提交的新指针。然后使用git reset你移动了师父指针返回二次提交。但既然你没动新支,它仍然指向它最初所做的提交。


查看完整回答
反对 回复 2019-06-28
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

一般来说.。

在这种情况下,Sykora公开的方法是最好的选择。但有时并不容易,也不是一般的方法。一般方法使用樱桃采摘:

为了实现OP想要的,这是一个两步的过程:

步骤1-注意从您希望在newbranch

执行

git checkout master
git log

注意你想要的(比如说3)提交的散列。newbranch..在这里,我将使用:
c承诺:9aa1233
d承诺:453ac3d
e承诺:612ecb3

注:您可以使用前七个字符或整个提交哈希。

步骤2-将它们放到newbranch

git checkout newbranch
git cherry-pick 612ecb3
git cherry-pick 453ac3d
git cherry-pick 9aa1233

或(在Git 1.7.2+上,使用范围)

git checkout newbranch
git cherry-pick 612ecb3~1..9aa1233

樱桃采摘将这三个提交应用于新分支。


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 1293 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信