我如何将修改的文件转换为以前的修订,在一个特定的 commit hash (我通过 git log 和 git diff 确定)?


当前回答

如果你曾经有一个版本的文件在承诺 $ A,然后后来做了两个不同的承诺 $ B 和 $ C (所以你正在看到的是第三个字符串的文件),如果你说“我想要返回第一个”,你真的意味着吗?

如果你想摆脱第二个和第三个 iteration 的变化,这是非常简单的:

$ git checkout $A file

命令要求“我想检查由命令A记录的状态的文件”。

另一方面,你指的是摆脱改变的第二个 iteration(即承诺 $B)引入,同时保持什么承诺 $C 做到文件,你会想转换 $B。

$ git revert $B

請注意,任何人創建的承諾 $ B 可能沒有非常規律,並可能在同一承諾中進行了完全無關的變化,而這個逆轉可能會觸摸其他檔案,而不是檔案,你會看到有害的變化,所以你可能想仔細檢查結果,然後做到這一點。

其他回答

对我来说,没有一个答案看起来很清楚,所以我想添加我的,看起来很容易。

我有一个承诺 abc1 之后我做了几个(或一个修改)到一个文件 file.txt。

1.git checkout file.txt : 这将删除本地变更,如果你不需要它们

2.git checkout abc1 file.txt : 这将使您的文件到您想要的版本

3.git commit -m “Restored file.txt to version abc1” : 这将承诺您的转换。

git push : 这将把一切推到远程存储库中

在步骤2和3之间,当然,你可以做 git 状态来了解正在发生的事情。 通常你应该看到 file.txt 已经添加了,这就是为什么不需要添加 git。

你可以在四个步骤中完成:

返回整个承诺与您想要具体返回的文件 - 它将创建一个新的承诺在您的分支软重定义承诺 - 删除承诺并将变更移动到工作区域 手动点击文件返回并承诺他们下载所有其他文件在您的工作区域

您需要在终端中输入的内容:

git revert <commit_hash> git reset HEAD~1 git add <file_i_want_to_revert> && git commit -m'reverting file' git checkout.

好运

首页 > 首页 > 目标文件

git reset HEAD path_to_file

第二次检查该文件

git checkout -- path_to_file

您可以使用 diff 命令快速查看文件中的更改:

git diff <commit hash> <filename>

然后将特定文件转换为该承诺,使用重新设置命令:

git reset <commit hash> <filename>

您可能需要使用 --hard 选项,如果您有本地修改。

管理路点的好工作流是使用标签清晰地标记时间线中的点,我无法完全理解你的最后一句话,但你可能想要的是从前一个点分开一个分支。

git checkout <commit hash>
git checkout -b <new branch name>

然后,你可以放弃这个对你的主要线,当你准备合并这些变化:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>
git revert <hash>

它听起来像你认为 git revert 只会影响最新的承诺。

它不会解决你的问题,如果你想转换一个更改在一个特定的文件,并承诺更改超过该文件。