如何从另一个分支获取一个文件
我正在使用Git和在主分支上工作。 这个分支有一个名为app.js
的文件。
我有一个experiment
分支,在这个分支中我做了一系列的改变和大量的提交。 现在我想把所有的改变只从app.js
的experiment
转移到master
分支。
我怎么做?
我再一次不想合并。 我只想把app.js
所有更改从experiment
分支到master
分支。
git checkout master # first get back to master git checkout experiment -- app.js # then copy the version of app.js # from branch "experiment"
另请参阅git如何撤消一个文件的更改?
正如JakubNarębski在评论中提到的那样:
git show experiment:path/to/app.js > app.js
除了在SO问题“ 如何从Git中的特定版本检索单个文件? ”中详细说明之外,您需要使用从repo的根目录下的完整path。
因此Jakub在他的例子中使用了path / to / app.js。
正如Frosty在评论中提到的那样:
你只会得到最新的app.js状态
但是,对于git checkout
或git show
,实际上可以引用任何你想要的修订版本,如SO问题“ git gui中的文件的git checkout版本 ”所示:
$ git show $REVISION:$FILENAME $ git checkout $REVISION -- $FILENAME
将是相同的$ FILENAME是版本化文件的完整path 。
$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。
假设you're on master
分支上, app.js from new-feature
分支获取app.js from new-feature
:
git checkout new-feature path/to/app.js // note that there is no leading slash in the path!
这会给你带来所需文件的内容。 您可以像往常一样, 使用sha1的一部分,而不是使用 新function 分支名称来获取该特定提交中的文件。
补充VonC和chhh的答案。
git show experiment:path/to/relative/app.js > app.js # If your current working directory is relative than just use git show experiment:app.js > app.js
要么
git checkout experiment -- app.js
或者在我的情况下,我想从另一个分支的所有文件,所以:
git checkout <brachname> -- .