当前位置:  开发笔记 > 开发工具 > 正文

为什么从已经上传的其他分支检出文件?

如何解决《为什么从已经上传的其他分支检出文件?》经验,为你挑选了2个好方法。

关于Git工作流程,我们创建了一个我们用于特定sprint的master的分支,并且该sprint中的每个工作项都从中分支出来.如此有效,分支/合并流程将是:

master
  |   \
  |    sprint42________
  |       |    \       \
  |       |     item1   item2
  |       | ___/       /
  |       |/          /
  |       | _________/
  |       |/
  | _____/
  |/
  |

现在,在这个流程中,我发现我对其中一个文件所做的更改item1也需要完成item2(想想我添加了一个方便功能的实用程序文件).

因此,基于此问题的已接受答案,我检查了item2分支并继续从item1分支中提取实用程序文件,如下所示:

git checkout item2
git checkout item1 utilities.xyzzy

但是,在检查时git status,似乎此文件已放入暂存区域,而我认为将其视为新修改的文​​件更有意义:

pax> git status
On branch item2
Your branch is up-to-date with 'origin/item2'.
Changes to be committed:
  (use "git reset HEAD ..." to unstage)
        modified:   utilities.xyzzy

为什么这样做?当我将一个文件从另一个分支拉到我当前的分支时,如何将它简单地作为一个修改后的文件,我将在准备好后暂存?



1> torek..:

旁注:当我阅读原始主题行"Why is file pulled from ..."(现已修复)时,我以为你是指git pull脚本.我认为,值得强调的是,你在git checkout这里特指的是,用于以下形式:.git checkout branch path

咨询的git checkout文档,我们发现这样的:

git checkout [-p|--patch] [] [--] ...

--patch给出时,git checkout不切换分支.它从索引文件或命名的(通常是提交)更新工作树中的命名路径.在这种情况下,-b--track选项毫无意义,并且给出其中任何一个都会导致错误.参数可用于指定特定的树(即提交,标记或树),以在更新工作树之前更新给定路径的索引.

我把关键位放在粗体中:git首先从给定的"tree-ish"写入索引(如果不直接从索引中检出),然后从索引复制到工作树.这就是新文件上演的原因.要撤消分段,必须git reset在同一路径上使用.

有一种方法可以将文件放入工作树而不通过索引复制它,使用git show:

git show item1:utilities.xyzzy > utilities.xyzzy

git show命令将指定对象(在本例中为该文件)完全打印到标准输出,并重定向输出捕获文件.但请注意,这会绕过任何在正常结帐时修改文件内容的涂抹过滤器.



2> VonC..:

正如我在" git reset vs git reset HEAD "中提到的那样git checkout -- .

git checkout  -- 

给出,git的结帐不切换分支.
从索引文件或命名(最常见的提交)更新工作树中的命名路径.

由于索引是直接更新的,因此您可以准备好提交文件.
因此,"的Changes to be committed:" git status.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有