有没有办法对文件进行不同的提交。
假设我修改了一个文件 5 次,在提交并推送到存储库后我想返回更改 2 次。
根据我的理解,唯一的方法是保留许多分支,我说得对吗?
如果我是对的,几天之内我将拥有数百个分支机构,所以我可能并没有真正理解它。
有人能澄清一下吗?
让我们首先对我们想要做的事情进行定性描述(本·斯特劳布的回答中提到了大部分内容)。我们已经进行了一些提交,其中五次更改了给定文件,并且我们希望将该文件恢复到以前的版本之一。首先,git 不保留单个文件的版本号。它只是跟踪内容 - 提交本质上是工作树的快照,以及一些元数据(例如提交消息)。因此,我们必须知道哪个提交具有我们想要的文件版本。一旦我们知道了这一点,我们就需要进行一次新的提交,将文件恢复到该状态。 (我们不能只是乱搞历史,因为我们已经推送了这些内容,而编辑历史会扰乱其他人。)
因此,让我们从寻找正确的提交开始。您可以非常轻松地查看对给定文件进行修改的提交:
git log path/to/file
如果您的提交消息不够好,并且您需要查看每次提交中对文件做了什么,请使用-p/--patch
option:
git log -p path/to/file
或者,如果您更喜欢 gitk 的图形视图
gitk path/to/file
您也可以在通过视图菜单启动 gitk 后执行此操作;视图的选项之一是要包含的路径列表。
无论哪种方式,您都可以找到包含所需文件版本的提交的 SHA1(哈希值)。现在,您所要做的就是:
# get the version of the file from the given commit
git checkout <commit> path/to/file
# and commit this modification
git commit
(checkout命令首先将文件读入索引,然后将其复制到工作树中,因此不需要使用git add
将其添加到索引中以准备提交。)
如果您的文件可能没有简单的历史记录(例如重命名和副本),请参阅 VonC 的精彩评论。git
可以指示更仔细地搜索此类内容,但会牺牲速度。如果你确信历史很简单,那么你就不必费心了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)