如何将更改从一个分支移动到另一个分支git?

时间:2011-11-10 20:28:02

标签: git

如何将我的工作和更改从master分支移动到新创建的分支,并在移动后保留主分支?

5 个答案:

答案 0 :(得分:42)

您可以使用git branch branchname创建指向当前提交的新分支(如果您想直接签出,则可以git checkout -b branchname)。这基本上会复制你的主分支,所以你可以继续在那里工作。

如果您已成功复制分支,则可以使用mastergit reset --hard commit重置为其原始点,其中commit是提交的哈希值,应该是主数据库中的最后一个提交

例如,你有这样的情况:

---- 1 ---- 2 ---- 3 ---- 4 ---- 5 ---- 6
                   ^                    ^
              original                master
            master commit

因此,您已在提交master上签出6,并且您希望在重置ticket时创建指向该6的新分支master 3

git branch ticket
git reset --hard 3
git checkout ticket

然后你在ticket指向提交6,而master指向3

答案 1 :(得分:19)

如果未提交更改。

您可以隐藏主分支中的更改。

git stash

然后签出分支

git checkout -b newbranchname

并在此处弹出更改

git stash pop

如果提交了更改:

然后创建一个分支:

git checkout -b newbranch

结帐回主分支:

git checkout master

重置为上次提交:

git reset --hard head^1

答案 2 :(得分:5)

如果你在意识到自己应该在分支机构之后提交(比方说)2次,那么就单击

git branch work_branch
git reset --hard HEAD~2

将2替换为您想要返回的提交数量。如果你想转移到分支继续工作,你现在仍然是主人,只需git checkout work_branch

如果您想了解如何使用git rev-parse --help

等引用遍历提交树的语法,请参阅HEAD~2

答案 3 :(得分:1)

我通过以下方法解决了这个问题

步骤1:从受感染的master分支中创建一个新分支,并将其命名为master_infected

步骤2:现在hard reset受感染的master分支用于删除受污染的commits

 git reset --hard HEAD~2  
    

(在commits之前返回两个HEAD,因为就我而言,我有两个受污染的commits。因此,对于您来说,情况可能有所不同) < / p>

现在我的master_infected分支包含要保留其(如我所说的受污染代码)的代码,而master分支现在处于保存模式。

答案 4 :(得分:0)

从你应该拥有的地方创建一个 new 分支,然后在不正确的分支上选择更改到新分支。

然后,您可以删除错误的分支,假设您没有将其推送到其他位置,并且已对其进行了其他更改。