有人将非工作代码合并到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中最新最好的代码的最佳方法是什么?这就是我想要做的事情:
答案 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)
这取决于你是否想要
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>
get reset <CleanCode
hash>
和git reset --soft <master top hash>
)毕竟历史看起来像这样
<cherry-picked delta>
|
<CleanCode state copy>
|
<delta to cherry-pick>
|
<bad commit>
..
|
<CleanCode>
|
..