Git恢复到之前的提交并继续向master提交新的更改

时间:2015-08-19 13:31:14

标签: git version-control

我是分支机构主管,负责人指着我上一次提交A,这是主人,我想知道以下是否可能:

  1. 恢复到之前的提交B.
  2. 将所有提交从B移到A(B除外)到新分支" experimental"。在这个主人的最后一次提交应该是B和"实验"最后一次提交应该是A。
  3. 在分支主控下的B之后创建一个新的提交C.在这个主人的最后一次提交应该是C
  4. 之后

    我的所有提交都已被推送到原点,我的工作目录是干净的(没有暂存或未分阶段的更改)。

    任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果你没有将提交从B推送到A到远程存储库,它就没有副作用。

按照与列表不同的顺序执行此操作:

  
      
  1. 将所有提交从B移到A(B除外)到新分支“experimental”
  2.   
git branch experimental

git branch创建指向当前experimental(在提交HEAD上)的分支A。当前分支仍为master

  
      
  1. 恢复到之前的提交B.
  2.   
  3. 此主人的最后一次提交应该是B,“实验”的最后一次提交应该是A。
  4.   
git reset --hard B

git reset将当前分支(master)移动到提交B--hard选项告诉它还要更新索引和工作树以匹配提交B(因此git status将报告“无需提交,工作目录清理”。)

  
      
  1. 在分支主控下的B之后创建一个新的提交C.这个主人的最后一次提交应该是C
  2.   

当前分支为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

希望这能解决问题。