Git:如何将修改过的文件重置为另一个分支中的状态?

22

假设我从develop分支创建了自己的分支,并在几次提交中多次修改了fileA文件,现在我只想将此文件恢复到develop的状态(而不是回滚其他更改),有没有简单的方法可以实现这一点?(我知道我可以从develop检出并覆盖我的分支中的文件)。

谢谢!

3个回答

59

您需要做的是

git checkout develop -- <path/to/file>

是的,但要小心,您将失去工作目录中该文件的所有更改。 - William Kinaan
1
此后,我们需要将此文件添加并提交才能在上游中体现。否则,以前提交的版本将继续存在。 - Siva Tumma
1
我不得不撤销换行和空格的更改。我试图通过编辑器还原,但无法实现。这个命令完成了我的工作! - aagjalpankaj

6
你无法“还原”,因为那是基于提交而不是文件进行的。但有两个替代方案可供选择。让我们假设所涉及的文件是 quux.c
  1. 从切换 develop 分支时的点开始执行 git rebase -i 命令,然后在每个提交中手动撤销你自那时以来对 quux.c 所做的更改。Git 将重写提交,以便看起来好像自从切换 develop 后就没有更改过 quux.c
  2. 更简单的方法是只需执行 git show master:quux.c > quux.c 命令即可。这将用 master 上的文件版本覆盖 quux.c 文件。然后将其添加并提交。这将创建一个额外的“还原”提交,但比上面的方法更简单。

更新

正如其他答案所示,git checkout branch -- file 命令比我在此提到的git show 命令更加用户友好,但效果相同。


谢谢!第二个要简单得多,因为文件已经修改了很多次。 - Heuristic
1
@hzxu 是的,但它有两个“缺点”:1. 它会引入一个新的提交;2. 早期的提交将具有修改后的 quux.c 版本,因此如果你从那里切出一个分支,你将得到那个版本。 - Noufal Ibrahim

2

请查看以下链接:

如何从Git的特定版本中检索单个文件?

如何从另一个分支获取单个文件

git show source_branch:path/to/file > file

功能正常,只是需要使用完整路径从仓库的根目录开始,详见SO问题“如何从Git特定修订版本中检索单个文件?”。

你只能获取文件的最新状态。但是,对于git checkout或git show,你可以引用任何想要的修订版本,如SO问题“在git gui中检出文件的修订版本”所示:

$ git show $REVISION:$FILENAME
$ git checkout $REVISION -- $FILENAME

如果$FILENAME是一个版本化文件的完整路径,则情况将是相同的。 $REVISION可以如git rev-parse所示。
experiment@{yesterday}:app.js # app.js as it was yesterday 
experiment^:app.js            # app.js on the first commit parent
experiment@{2}:app.js         # app.js two commits ago

等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接