小编典典

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

git

我正在使用 Git 并在master分支上工作。该分支有一个名为app.js.

我有一个experiment分支,我在其中进行了大量更改和大量提交。现在我想将所做的所有更改都带到app.jsfromexperimentmaster分支。

我怎么做?

我再一次不想合并。我只想将所有更改app.jsexperiment一个分支带到master另一个分支。


阅读 225

收藏
2022-02-20

共1个答案

小编典典

git checkout master               # first get back to master
git checkout experiment -- app.js # then copy the version of app.js 
                                  # from branch "experiment"

2019 年 8 月更新,Git 2.23

使用新的git switchgit restore命令,这将是:

git switch master
git restore --source experiment -- app.js

默认情况下,只恢复工作树。
如果您还想更新索引(意味着恢复文件内容,在一个命令中将其添加到索引中):

git restore --source experiment --staged --worktree -- app.js
# shorter:
git restore -s experiment -SW -- app.js
git show experiment:path/to/app.js > path/to/app.js

您需要使用存储库根目录的完整路径。
因此,Jakub 在他的示例中使用了 path/to/app.js。

你只会得到 app.js 的最新状态

但是,对于git checkoutor git show,您实际上可以引用您想要的任何修订,如 SO 问题“ git checkout revision of a file in 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

等等。

补充:

您也可以从隐藏处执行此操作:

git checkout stash -- app.js

如果您在两个分支上工作并且不想提交,这将非常有用。

2022-02-20