如何签出来自另一个分支的文件,然后覆盖当前分支

时间:2016-02-09 22:00:24

标签: git

基于http://jasonrudolph.com/blog/2009/02/25/git-tip-how-to-merge-specific-files-from-another-branch/,我们可以使用以下命令将更改从另一个分支合并到本地分支。

例如:

$git checkout master -- hello.c

此命令将hello.c从master分支合并到当前本地分支。

问题>如果我想使用master中的hello.c来覆盖我的本地分支文件而不进行任何合并,该怎么办?我应该使用哪个选项?

谢谢

- 更新 -

$ pwd
/sandbox/projectOne

$ git branch
  feature/F_Source
* feature/F_Dest
  master
$ git status -s
$
$ git diff feature/F_Source feature/F_Dest -- Messages/src/Hello.C | wc -l
165
$ git checkout feature/F_Source -- Messages/src/Hello.C
$
$ git diff feature/F_Source feature/F_Dest -- Messages/src/Hello.C | wc -l
165
$ git status -s
M  Messages/src/Hello.C
$

如您所见,在结账之前,F_Source Hello.C和F_Dest Hello.C之间存在差异。结账后,仍然存在差异。所以我假设结账不是覆盖操作,否则我们不应该看到任何差异。

2 个答案:

答案 0 :(得分:1)

  

问题>如果我想使用master中的hello.c来覆盖我的本地分支文件而不进行任何合并,该怎么办?

     

我应该使用哪个选项?

正如您已经发现的那样,这是做到这一点的方法(到目前为止您所做的)

git checkout <branch_name> -- <file path>


# On branch master - checkout different branch
git checkout <branch2>

# now checkout the desired file form different branch (master in this case)
git checkout master -- hello.c

由于您正在检查来自不同分支的文件,因此将进行合并。如果你不想合并,只需抓取你需要的文件内容,并覆盖当前文件,这样内容将是新的,这将是一个简单的改变。

答案 1 :(得分:1)

请注意您发布的链接中的引用:

  

您需要抓取的代码与少数几个文件隔离,主分支中尚未存在这些文件

所以他称之为“合并”并不是真正的合并;它只是复制文件,不需要合并。当您致电git checkout master -- hello.c时,确实覆盖hello.c的本地副本master;它没有合并任何东西。