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

How to take an old version of git code and make it the latest

有人将非工作代码合并到 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 中最新最好的代码的最佳方法是什么?这就是我想要做的:

将最后一个好的 master 签出到一个新的分支中(这样如果你不小心在错误的时间推送我们不会破坏代码):

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

然后合并到本地master

git checkout local_master_branch
git merge good_branch

然后冲洗并使用 good 代码重复。

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

如果你的 好 [=7​​1=] 分支实际上并不存在,而你只有坏掉的母版可以使用,请检查一下

git checkout origin/master -b broken_master

并在好主人的基础上进行交互式变基

git rebase -i local_master_branch

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

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

然后! 危险!这里有龙!

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

完成后,您应该备份当前(损坏的)主控

git checkout origin/master -b broken_master

然后检查你的干净、完全构建并且没有问题分支并修复所有问题:

git checkout local_master_branch

重命名您的本地分支机构

git branch -m master

然后强制推送到 master

git push origin master -f

危险!如果您不知道自己实际在做什么,这是危险,因为您正在重置 origin 上的 master .

对于所有像 "Hey now the master I was working on doesn't exist any more," 这样的人,让他们在新主人身上变基。

就看你想不想

  1. 重写从Clean Code开始的历史记录(如果已经推送则需要强制推送)或
  2. 追加历史只是抵消错误提交的影响(推送友好)。

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 提交同步
  2. HEAD再次指向master top,索引仍保持状态 CleanCode
    (1 & 2 可以用 get reset <CleanCode hash>git reset --soft <master top hash> 代替)
  3. 使用 CleanCode 中的有效索引进行新提交 - 原始 CleanCode 无效后每次提交的效果(好与坏)
  4. apply good delta(恢复good commit的效果)

毕竟历史会是这样的

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