我正在使用git并在master分支上工作。该分支有一个名为app.js
的文件。
我有一个experiment
分支,我在其中进行了一系列更改和大量提交。现在,我想将所有更改仅从app.js
experiment
转移到master
分支。
我该怎么做?
我再一次不想合并。我只想将app.js
中的所有更改从experiment
分支转移到master
分支。
答案 0 :(得分:1319)
git checkout master # first get back to master
git checkout experiment -- app.js # then copy the version of app.js
# from branch "experiment"
另见git how to undo changes of one file?
在评论中提及Jakub Narębski:
git show experiment:path/to/app.js > path/to/app.js
也可以,但是,如SO问题“How to retrieve a single file from specific revision in Git?”中详细说明的那样,您需要使用回购根目录中的完整路径。
因此,Jakub在他的例子中使用了路径/ to / app.js.
评论中提及Frosty:
您只能获得最近的app.js状态
但是,对于git checkout
或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
如果您正在处理两个分支并且不想提交,那么这非常有用。
答案 1 :(得分:290)
一切都要简单得多,为此使用git checkout。
假设 you're on master
分支,以获取 app.js from new-feature
分支:
git checkout new-feature path/to/app.js
// note that there is no leading slash in the path!
这将为您带来所需文件的内容。您可以像以往一样使用sha1的一部分而不是 新功能 分支名称来将文件作为它是在那个特定的提交中。
答案 2 :(得分:30)
补充VonC和chhh的答案。
vectork.resize(vector1.size(),0);
for ( int i = 0; i < vector1.size(); i++ ) {
vectork[i] = vectork[i] << 1;
if (vector1[i] == 1) vectork[i] +=1;
vectork[i] << 1;
if (vector2[i] == 1) vectork[i] +=1;
vectork[i] << 1;
if (vector3[i] == 1) vectork[i] +=1;
vectork[i] << 1;
if (vector5[i] == 1) vectork[i] +=1;
}
或
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
答案 3 :(得分:5)
或者如果你想要来自另一个分支的所有文件:
git checkout <branch name> -- .
答案 4 :(得分:3)
这是一种务实的方法,不能直接回答OP,但有些方法有用:
如果有问题的分支位于GitHub上,则可以使用GitHub提供的许多工具中的任何一种导航到所需的分支和文件,然后单击“原始”以查看纯文本,并(可选)复制和粘贴所需的文字。
我喜欢这种方法,因为它可以让您在将远程文件拉到本地计算机之前完整地查看它。
答案 5 :(得分:1)
另一种方法是创建具有差异的补丁并将其应用于master分支 例如。假设开始使用app.js之前的最后一次提交是00000aaaaa,而包含所需版本的提交是00000bbbbb
您可以在实验分支上运行它:
git diff 00000aaaaa 00000bbbbb app.js > ~/app_changes.git
这将创建一个文件,其中包含两个app.js提交之间的所有差异,您可以将其应用于任何位置。您可以将文件保存在项目之外的任何地方
然后,在master中,您只需运行:
git apply ~/app_changes.git
现在您将看到项目中的更改,就像您手动进行的一样。
答案 6 :(得分:1)
要从另一个分支还原文件,只需在工作分支中使用以下命令:
git restore -s my-other-branch -- ./path/to/file
-s
标志是source
的缩写,即您要从中提取文件的分支。
(选择的答案非常有帮助,但也有点不知所措。)
答案 7 :(得分:0)
# check out all files in <paths> from branch <branch_name>
git checkout <branch_name> -- <paths>
来源:http://nicolasgallagher.com/git-checkout-specific-files-from-another-branch/。
示例:
# Check out "somefile.c" from branch `my_branch`
git checkout my_branch -- somefile.c
# Check out these 4 files from `my_branch`
git checkout my_branch -- file1.h file1.cpp mydir/file2.h mydir/file2.cpp
答案 8 :(得分:-1)
如果要从特定提交(任何分支)中获取文件,请说06f8251f
git checkout 06f8251f path_to_file
例如,在Windows中:
git checkout 06f8251f C:\ A \ B \ C \ D \ file.h
答案 9 :(得分:-1)
git checkout master -go to the master branch first
git checkout <your-branch> -- <your-file> --copy your file data from your branch.
git show <your-branch>:path/to/<your-file>
希望这会对您有所帮助。 如果您有任何疑问,请告诉我。