14

我将提交推送到我不小心添加了一个文件的仓库。没有其他人从远程仓库合并,所以我可以重写历史。但是当我从本地提交中删除文件(取消暂存,不从源代码管理或磁盘中删除)时,我无法推送更改。git push 显示一切都是最新的

4

5 回答 5

14

Here you go:

git checkout HEAD~ -- path/to/your/file
git add path/to/your/file
git commit --amend -C HEAD

git diff -p HEAD~ -- path/to/your/file | git apply -R
git commit --amend -C HEAD

git reset HEAD~ -- path/to/your/file
git commit --amend -C HEAD
于 2012-04-12T15:42:52.997 回答
8

尝试:

git rm --cached <yourfile>
git commit --amend
git push -f
于 2012-04-12T13:37:37.370 回答
5

如果您需要重写完整的提交,请尝试使用

git reset HEAD^
git add <files to be part of the commit>
# or git add -pu
git commit -C <previous commit number>

在执行此操作之前,您需要保留最后一个提交编号,以便能够重用提交消息/日期/作者。

于 2012-04-12T14:30:03.567 回答
3

虽然我做了类似于 Colin 和 ydroneaud 建议的事情,

答案是使用

git push +sa1:sa1

其中 sa1 是我的分支。这迫使甚至“什么都没有”。

于 2012-04-13T03:38:00.793 回答
0

使用这两个命令,您可以立即恢复FILE上次提交中的所有更改,而无需更改其(工作树)内容:

git reset HEAD~ "FILE"
git commit --amend --no-edit

根据https://superuser.com/a/567550的答案进行了简化

请注意,这也会将所有当前暂存的更改添加到提交中,因此您可能需要提前运行git restore --staged -- $(git rev-parse --git-dir)


先前的解决方案源自@ColinHebert 的答案

git diff -p HEAD~ -- "FILE" | git apply --reverse --cached
git commit --amend --no-edit
于 2021-12-02T09:55:58.113 回答