如何使用旧版本的git代码并使其成为最新版本

时间:2016-09-09 17:19:55

标签: git gitlab git-rebase git-reset git-revert

有人将非工作代码合并到git中,之后有几次签到。我有两个选项,1。逐个还原更改,然后当我达到良好的代码时,停在那里。选项2.使用checkin sha将干净版本分支并将其作为头部。我看到问题posted here和其他几个问题。如果我尝试选项一,当我尝试重置下一个重置后,我得到:

On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

然后我检查了我想要移动到HEAD的版本,并尝试提交它。但我明白了:

HEAD detached at 0c1b8c1
nothing to commit, working directory clean

当我尝试选项2时,获取正确版本的代码,但是当我尝试提交时,它没有提交任何内容。采用旧版本代码并使其成为GIT中最新最好的代码的最佳方法是什么?这就是我想要做的事情: enter image description here

2 个答案:

答案 0 :(得分:4)

将最后一位好主人检查到一个新分支(所以如果你不小心推错了我们不破坏代码):

git checkout <last good master hash> -b local_master_branch

现在,你可以在那个分支上挑选你想要的东西:

git cherry-pick (HASH OF DESIRED COMMITS)

这很有效,但如果有很多分支,可能会非常耗时。

====================================

我的建议是结帐好的分支

git checkout good_branch

将其重新绑定到new_branch

git rebase local_master_branch

然后将其合并到本地主文件

git checkout local_master_branch
git merge good_branch

然后用好的代码冲洗并重复。

===================================

如果你的好的分支实际上并不存在,并且你只有破碎的主人可以使用,请查看

git checkout origin/master -b broken_master

并在好主人

之上进行交互式变基
git rebase -i local_master_branch

这将允许您指定实际要保留的内容,实际上是三种方法中最快的。

+++++++++++++++++++++++++++++++++++++++++++++++ +++

THEN! 危险!这里是龙!

+++++++++++++++++++++++++++++++++++++++++++++++ +++

完成后,您应该备份当前(已损坏)主文件

git checkout origin/master -b broken_master

然后检查你的干净,完全建筑,没有问题分支修复一切:

git checkout local_master_branch

重命名您的本地分支

git branch -m master

然后强制推动那个掌握

git push origin master -f

危险!如果您不知道自己在做什么,这是危险,因为您正在重设原点。

对于所有像“嘿,现在我正在努力的主人不再存在的人”,让他们对新主人有所帮助。

答案 1 :(得分:0)

这取决于你是否想要

  1. Clean Code开始重写历史记录(如果已按下则需要强制推送)或
  2. 追加历史记录只是消除了错误提交的效果(推送友好)。
  3. 已经描述了

    1) 2)看起来像

    1 git checkout <CleanCode hash> 
    2 git symbolic-ref HEAD refs/heads/master
    3 git commit -m <commit message>
    4 git cherry-pick <good commit>
    
    1. 分离签出,索引与CleanCode commit
    2. 同步
    3. HEAD再次指向掌握顶部,索引仍处于持有状态 CleanCode
      (1&amp; 2可以替换为get reset <CleanCode hash>git reset --soft <master top hash>
    4. 使用CleanCode中的有效索引进行新提交 - 在原始CleanCode无效(坏和好)后每次提交的效果
    5. 应用良好的delta(恢复良好提交的效果)
    6. 毕竟历史看起来像这样

      <cherry-picked delta>
      |
      <CleanCode state copy>
      |
      <delta to cherry-pick>
      |
      <bad commit>
      ..
      |
      <CleanCode>
      |
      ..