我是分支机构主管,负责人指着我上一次提交A,这是主人,我想知道以下是否可能:
我的所有提交都已被推送到原点,我的工作目录是干净的(没有暂存或未分阶段的更改)。
任何指导都将不胜感激。
答案 0 :(得分:4)
如果你没有将提交从B
推送到A
到远程存储库,它就没有副作用。
按照与列表不同的顺序执行此操作:
- 将所有提交从B移到A(B除外)到新分支“experimental”
醇>
git branch experimental
git branch
创建指向当前experimental
(在提交HEAD
上)的分支A
。当前分支仍为master
。
- 恢复到之前的提交B.
- 此主人的最后一次提交应该是B,“实验”的最后一次提交应该是A。
醇>
git reset --hard B
git reset
将当前分支(master
)移动到提交B
。 --hard
选项告诉它还要更新索引和工作树以匹配提交B
(因此git status
将报告“无需提交,工作目录清理”。)
- 在分支主控下的B之后创建一个新的提交C.这个主人的最后一次提交应该是C
醇>
当前分支为master
。进行所需的更改,将它们添加到索引并照常提交。
恭喜!您的master
刚刚与experimental
分歧。
在开始之前,您必须清洁工作树。这意味着git status
必须报告“无需提交,工作目录清理”(它还必须报告您没有未添加到索引的未跟踪文件;只要不跟踪文件,您就不必担心在提交B
或任何以后的提交中。
如果工作树不干净,那么您可以使用git stash
将更改放在一边以便以后恢复。当您到达第3步时,使用git stash apply
恢复隐藏的更改。
答案 1 :(得分:2)
git checkout -b experimental // Will Create and Switch your branch to "experimental" with the existing changes from master.
git push origin experimental // Will Push "experimental" to remote origin.
git checkout master // Will Switch branch back to "master"
git reset --hard <commit> // Will bring the head to the <commit> mentioned. Also, will remove uncommitted changes from "master"
git add <files> // Add files to be committed to "master"
git commit -m "new commit C" // Now you can do the new commit "C" to master which is your current branch.
git push origin master // Will Push master to remote
希望这能解决问题。