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

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

我想将最后几次提交转移到一个新的分支,并在这些提交完成之前带Master回到新的分支。不幸的是,我的Git-fu还不够强大,有什么帮助吗?

我该怎么做

master A - B - C - D - E

为了这个?

newbranch     C - D - E
             /
master A - B


青春有我
浏览 1299回答 3
3回答

一只萌萌小番薯

搬到一个新的分支机构警告:此方法之所以有效,是因为您正在使用第一个命令创建一个新分支: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

素胚勾勒不出你

对于那些想知道为什么会起作用的人(就像我刚开始那样):你想回到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你移动了师父指针返回二次提交。但既然你没动新支,它仍然指向它最初所做的提交。

扬帆大鱼

一般来说.。在这种情况下,Sykora公开的方法是最好的选择。但有时并不容易,也不是一般的方法。一般方法使用樱桃采摘:为了实现OP想要的,这是一个两步的过程:步骤1-注意从您希望在newbranch执行git checkout master git log注意你想要的(比如说3)提交的散列。newbranch..在这里,我将使用:c承诺:9aa1233d承诺:453ac3de承诺:612ecb3注:您可以使用前七个字符或整个提交哈希。步骤2-将它们放到newbranchgit 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樱桃采摘将这三个提交应用于新分支。
打开App,查看更多内容
随时随地看视频慕课网APP