在Git上,假设我搞砸了我的提交,我想让版本3提交之前作为新版本。如果我签出xxxx,它创建了一个新的分支,似乎我只能合并它?我能把这个做成新的“主版本”吗?

我想要:

A-B-C-D-E

成为

A-B-C-D-E-F

F和C的含量完全相同

如果我使用git revert xxxx代替,它似乎肯定会有冲突,我需要手动解决它。

我真正想要的是在某个时候将旧的提交变成新的提交,不管我的工作目录或最新的提交中有什么。

我该怎么做呢?


当前回答

艾洛妮一份一份地

git checkout <commit-hash> <filename>

但是您可以通过这样做更容易地签出所有文件

git checkout <commit-hash> .

其他回答

git rm -r .
git checkout HEAD~3 .
git commit

提交后,新HEAD中的文件将与修订HEAD~3中的文件相同。

听起来你只是想重置到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樱桃选择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日志检查了我的历史记录,我仍然有我的历史记录以及我从旧文件中做出的新更改。我也可以推。

注意,要回到您想要的状态,您需要将提交的哈希值放在不想要的更改之前。在此之前,还要确保没有未提交的更改。

选C

这里C是C的提交散列,这将旧的提交应用到最新的提交之上。

到目前为止,其他答案创建新的提交,撤销旧提交中的内容。我们有可能回到过去“改变历史”,但这可能有点危险。只有在您要更改的提交没有推送到其他存储库时才应该这样做。

你要找的命令是git rebase——interactive

如果你想改变HEAD~3,你想发出的命令是git rebase——interactive HEAD~4。这将打开一个文本编辑器,并允许您指定要更改哪些提交。

在对重要的内容进行尝试之前,请在不同的存储库上进行练习。手册页应该为您提供所需的所有其余信息。