我有2次提交(本地),我的历史是: A - B :
我想修改提交A并以新的形式替换文件,以便在推送任何内容之前获得干净的历史记录。
我这样做了:
reset --soft
在A add
myfile_v2.txt commit --amend
现在我可以看到我的提交A中有更正的文件,但是我无法弄清楚如何在我之前的HEAD中返回,如果没有再次提交B,这是可能的。
有什么想法吗?
答案 0 :(得分:1)
提交哈希包含此提交的完整历史记录。因此,如果您更改历史记录,则历史记录不再属于该提交,但必须重新创建提交。
有很多方法可以做到这一点。在您的情况下,您可以cherry-pick
B
,一切都很好。
我如何做到这一点是一个互动的rebase(rebase -i
)。通过首先执行交互式rebase,将A
的节更改为edit
,然后执行提交修改,然后继续变基。或者首先在B
之上创建一个新提交,然后使用rebase -i
重新排序,并squash
或fixup
第二次提交。甚至使用自动修正或自动壁球。
答案 1 :(得分:1)
您无法修改先前的提交。每次提交都是唯一的。
您可以做的是使用新提交重新创建历史记录。使用命令git-rebase
我知道你现在正处于这一点:
Pre_A - A - B
\
A1
你已经失去了你的" B"承诺。要恢复提交,请使用git-reflog
git reflog
您将看到分支HEAD
的最新位置。其中一个是B提交。写下行开头的哈希。例如:
git reflog
a123b Ammend Commit of Previous A that generates A1 commit
b234c git reset soft to A Commit
c345d B Commit
b234c A Commit ##Look that the HASH is the same that the git-reset##
一旦你获得了B Commit的HASH。创建一个分支来恢复提交。
git branch tmpBranch c345d
此时,您需要将此提交放在" A1"的新历史记录中。而不是在" A"。您可以使用git-rebase
我认为你在主分公司工作。
git checkout tmpBranch
git rebase --onto master tmpBranch~1 tmpBranch
这将从tmpBranch提交的一个提交向下重新创建历史记录,直到master中的tmpBranch提交(在您的情况下只有一个提交,B提交)(指向A1提交)。