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

时间:2017-06-27 05:04:43

标签: git

假设我从develop分支创建了自己的分支,并在几次提交中修改了几次,现在我想将此文件恢复为develop中的状态(不恢复我的其他状态)这是一种简单的方法吗? (我知道我可以从develop结帐并在我的分支中覆盖它。)

谢谢!

3 个答案:

答案 0 :(得分:11)

你做

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

答案 1 :(得分:1)

你无法恢复&#34;因为那是在提交的基础上完成的(而不是逐个文件)。但有两种选择。你可以选择适合你的。我们假设有问题的文件是quux.c

  1. 从切断git rebase -i分支的位置开始执行develop,然后手动撤消自此后每次提交中对quux.c所做的更改。 Git将重写提交,以使quux.c看起来像develop从未改变过来git show master:quux.c > quux.c被切断。
  2. 更简单的路线就是简单地说quux.c。这将使用master上的文件版本覆盖git checkout branch -- file。然后添加并提交它。这将创造一个额外的&#34;还原&#34;提交,但它比上面更简单。
  3. 更新

    正如其他答案正确指出的那样,git show比我在这里提到的created命令更友好,但效果是相同的。

答案 2 :(得分:0)

请参阅以下链接:

How to retrieve a single file from specific revision in Git?

How to get just one file from another branch

git show source_branch:path/to/file > file

运行良好,除了如SO问题&#34;如何从Git中的特定版本检索单个文件?&#34;中详述的那样,您需要使用repo根目录中的完整路径

您只能获得最新的文件状态 但是,对于git checkout或git show,您实际上可以引用您想要的任何修订,如SO问题&#34; git guout&#34;中的文件的git checkout修订版所示:

$ 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

等等。