如何将我的工作和更改从master
分支移动到新创建的分支,并在移动后保留主分支?
答案 0 :(得分:42)
您可以使用git branch branchname
创建指向当前提交的新分支(如果您想直接签出,则可以git checkout -b branchname
)。这基本上会复制你的主分支,所以你可以继续在那里工作。
如果您已成功复制分支,则可以使用master
将git 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 分支,然后在不正确的分支上选择更改到新分支。
然后,您可以删除错误的分支,假设您没有将其推送到其他位置,并且已对其进行了其他更改。