git 如何从提交中取回一些文件?

uttx8gqw  于 2023-01-15  发布在  Git
关注(0)|答案(3)|浏览(208)

比方说,你已经提交了所有的文件,但实际上意味着一些。

git commit -am "commit1"

# should've been instead
git add file1 file2
git commit -m "commit1"

我如何从提交中删除一些文件?我不想删除修改,我只想这次不要提交所有的文件。

oipij1gg

oipij1gg1#

请尝试以下操作:

git reset HEAD^
git add <your files>
git commit

说明:git reset在这种情况下会改变分支所指向的内容,而不会影响仓库中的文件。HEAD^指向的提交刚好在您所查看的提交之前,因此reset HEAD^会通过使分支指向提交历史中刚好在其之前的提交来"撤销"该提交。
由于您保留了文件,因此可以根据需要重新添加它们。
旁注:当你将分支指向上一个提交时,你当前的提交就变成了"孤儿",很难再被找到了.你可以用git reflog在reflog中找到它的提交ID,然后用git show <ID>或类似的命令显示它.你也可以在reset操作之前创建一个新的标签或分支.一般来说,只要您在某个时间点提交了数据,就不会丢失数据。
@mariusm说的也很管用:你可以使用git checkout HEAD^ -- my-file.txt命令将不需要的文件恢复到以前的状态(小心,这会覆盖当前版本),然后使用git add my-file.txt; git commit --amend命令提交它。2根据你想要实现的目标,这可能会更复杂。

qni6mghb

qni6mghb2#

如果你还没有艾德你的提交,那么就做你想做的事情,用git addgit rm添加修改,然后执行git commit --amend(你可能想修改消息,但这是这个命令的另一个选项)

kkih6yb8

kkih6yb83#

假设你想从提交<A>中获取一些文件,那么你可以:

git checkout <A> path/to/the/file.txt
git commit --amend

通常情况下,当您错误地提交了文件时,您希望从上一次提交中 checkout 该文件:

git checkout HEAD^ path/to/the/file.txt
git commit --amend

相关问题