合并策略的git还原问题(他们的)

问题描述 投票:1回答:1

我想恢复到先前提交的分支,并在该提交中进行所有更改,而不是从当前提交中获取任何更改。

我已经设置了我的测试目录,如下所示:

mkdir test_dir
cd test_dir

git init .

touch a_file

git add a_file
git commit -am "file added."
# say commit id 0_afile

echo "1 line" >> a_file
git commit -am "1 line"
# say commit id 1_afile

echo "2 line" >> a_file
git commit -am "2 line"
# say commit id 2_afile

echo "3 line" >> a_file
git commit -am "3 line"
# say commit id 3_afile

echo "4 line" >> a_file
git commit -am "4 line"
# say commit id 4_afile

当我运行git revert --no-edit -X theirs 2_afile。我期待0_afile1_afile2_afile的内容提交,但结果不包含2_afile的内容。有人能指出我做错了什么。

git git-merge git-revert
1个回答
3
投票

这对我来说似乎有些自相矛盾:

我想恢复之前的分支提交...

(粗体是我的;注意这很容易;例如,参见Reset or revert a specific file to a specific revision using Git?,虽然它是针对某些特定文件或文件)

...获取该提交中的所有更改,而不是当前提交中的任何更改。

提交不是变更,提交是国家。

举一个简单的例子,假设我告诉你它在星期五外面是68˚F(20˚C)。那是一个州。如果我问你昨天的温度有什么变化,你能告诉我吗?你还需要先知道什么?

如果温度上升9˚F(5˚C),那就是变化。如果我告诉你它在星期一和周日的比例上升了很多,星期天的温度是多少?我还需要先告诉你什么?


在Git中,每个提交都是所有文件的完整快照,无论它们在您提交时的状态如何。要从提交中获取更改,有必要将该提交与其他提交进行比较。显而易见的“其他”提交是紧接在前的提交,即提交的父提交。如果提交只有一个父,Git可以自动执行此操作:它提取先前提交的文件(状态)和给定提交的文件(另一个状态),然后减去它们以生成一组更改。

如果你想要一个先前提交的文件的内容,这很容易;看到链接的问题,这是重复的。 git revert所做的是完全不同的:它将提交 - 状态 - 转换为更改,然后尝试将相同的更改应用于当前状态。例如,请参阅我最近对Revert only a single file of a pushed commit的回答。

© www.soinside.com 2019 - 2024. All rights reserved.