在Git上,假设我搞砸了我的提交,我想让版本3提交之前作为新版本。如果我签出xxxx,它创建了一个新的分支,似乎我只能合并它?我能把这个做成新的“主版本”吗?
我想要:
A-B-C-D-E
成为
A-B-C-D-E-F
F和C的含量完全相同
如果我使用git revert xxxx代替,它似乎肯定会有冲突,我需要手动解决它。
我真正想要的是在某个时候将旧的提交变成新的提交,不管我的工作目录或最新的提交中有什么。
我该怎么做呢?
在Git上,假设我搞砸了我的提交,我想让版本3提交之前作为新版本。如果我签出xxxx,它创建了一个新的分支,似乎我只能合并它?我能把这个做成新的“主版本”吗?
我想要:
A-B-C-D-E
成为
A-B-C-D-E-F
F和C的含量完全相同
如果我使用git revert xxxx代替,它似乎肯定会有冲突,我需要手动解决它。
我真正想要的是在某个时候将旧的提交变成新的提交,不管我的工作目录或最新的提交中有什么。
我该怎么做呢?
听起来你只是想重置到C;这就是做树:
a - b - c
你可以用reset来实现:
git reset --hard HEAD~3
(注:你说三次提交之前,所以这就是我写的;在你的例子中,C只是两次提交前,所以你可能想使用HEAD~2)
如果你想,你也可以使用revert,尽管据我所知,你需要一次做一个还原:
git revert HEAD # Reverts E
git revert HEAD~2 # Reverts D
这将创建一个新的提交F,内容与D相同,G内容与c相同,如果你想,你可以把它们压缩在一起
到目前为止,其他答案创建新的提交,撤销旧提交中的内容。我们有可能回到过去“改变历史”,但这可能有点危险。只有在您要更改的提交没有推送到其他存储库时才应该这样做。
你要找的命令是git rebase——interactive
如果你想改变HEAD~3,你想发出的命令是git rebase——interactive HEAD~4。这将打开一个文本编辑器,并允许您指定要更改哪些提交。
在对重要的内容进行尝试之前,请在不同的存储库上进行练习。手册页应该为您提供所需的所有其余信息。
这正是我想做的。我不确定之前的命令git樱桃选择C,这听起来不错,但似乎你这样做是从另一个分支而不是同一分支的变化,有人尝试过吗?
所以我做了一些同样有效的事情: 我从旧的提交文件中得到了我想要的文件
git checkout <commit-hash> <filename>
前任: git 结帐 08a6497b76ad098a5f7eda3e4ec89e8032a4da51 文件.css
->这个选项以旧提交的文件为例
然后我做了我的改变。我又犯了错。
git status (to check which files were modified)
git diff (to check the changes you made)
git add .
git commit -m "my message"
我用git日志检查了我的历史记录,我仍然有我的历史记录以及我从旧文件中做出的新更改。我也可以推。
注意,要回到您想要的状态,您需要将提交的哈希值放在不想要的更改之前。在此之前,还要确保没有未提交的更改。
艾洛妮一份一份地
git checkout <commit-hash> <filename>
但是您可以通过这样做更容易地签出所有文件
git checkout <commit-hash> .