如何获取旧版本的 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 代码重复。
===================================
如果你的 好 [=71=] 分支实际上并不存在,而你只有坏掉的母版可以使用,请检查一下
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," 这样的人,让他们在新主人身上变基。
就看你想不想
- 重写从
Clean Code
开始的历史记录(如果已经推送则需要强制推送)或
- 追加历史只是抵消错误提交的影响(推送友好)。
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>
- 分离检出,索引与 CleanCode 提交同步
- HEAD再次指向master top,索引仍保持状态
CleanCode
(1 & 2 可以用 get reset <CleanCode
hash>
和 git reset --soft <master top hash>
代替)
- 使用 CleanCode 中的有效索引进行新提交 - 原始 CleanCode 无效后每次提交的效果(好与坏)
- apply good delta(恢复good commit的效果)
毕竟历史会是这样的
<cherry-picked delta>
|
<CleanCode state copy>
|
<delta to cherry-pick>
|
<bad commit>
..
|
<CleanCode>
|
..
有人将非工作代码合并到 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 代码重复。
===================================
如果你的 好 [=71=] 分支实际上并不存在,而你只有坏掉的母版可以使用,请检查一下
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," 这样的人,让他们在新主人身上变基。
就看你想不想
- 重写从
Clean Code
开始的历史记录(如果已经推送则需要强制推送)或 - 追加历史只是抵消错误提交的影响(推送友好)。
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>
- 分离检出,索引与 CleanCode 提交同步
- HEAD再次指向master top,索引仍保持状态
CleanCode
(1 & 2 可以用get reset <CleanCode hash>
和git reset --soft <master top hash>
代替) - 使用 CleanCode 中的有效索引进行新提交 - 原始 CleanCode 无效后每次提交的效果(好与坏)
- apply good delta(恢复good commit的效果)
毕竟历史会是这样的
<cherry-picked delta>
|
<CleanCode state copy>
|
<delta to cherry-pick>
|
<bad commit>
..
|
<CleanCode>
|
..