只用Git修改多个文件中的一个文件?

我怎样才能隐藏我的分支上多个已更改文件中的一个?


警告

正如在评论中指出的那样,这将所有东西放入存储器中,不论是上演还是未上架。 - 保持索引仅在索引完成后离开索引。 当您稍后弹出藏匿处时,这可能会导致合并冲突。


这会隐藏您以前没有添加过的所有内容。 只要git add你想保留的东西,然后运行它。

git stash --keep-index

例如,如果您想将旧提交拆分为多个变更集,则可以使用以下过程:

  • git rebase -i <last good commit>
  • 将某些更改标记为edit
  • git reset HEAD^
  • git add <files you want to keep in this change>
  • git stash --keep-index
  • 根据需要进行修复。 不要忘记git add任何更改。
  • git commit
  • git stash pop
  • 根据需要从#5重复。
  • git rebase --continue

  • 你也可以使用git stash save -p "my commit message" 。 通过这种方式,您可以选择应该添加哪些区块来存储,还可以选择整个文件。

    系统会提示您为每个人做一些操作:

       y - stash this hunk
       n - do not stash this hunk
       q - quit; do not stash this hunk or any of the remaining ones
       a - stash this hunk and all later hunks in the file
       d - do not stash this hunk or any of the later hunks in the file
       g - select a hunk to go to
       / - search for a hunk matching the given regex
       j - leave this hunk undecided, see next undecided hunk
       J - leave this hunk undecided, see next hunk
       k - leave this hunk undecided, see previous undecided hunk
       K - leave this hunk undecided, see previous hunk
       s - split the current hunk into smaller hunks
       e - manually edit the current hunk
       ? - print help
    

    由于git基本上是管理所有存储库内容和索引(而不是一个或多个文件),所以git stash与所有工作目录交易,并不令人意外。

    实际上,自从Git 2.13(2017年第2季度)以来,您可以隐藏单个文件:

    git stash push [--] [<pathspec>...]
    

    有关更多信息,请参阅“隐藏对特定文件的更改”。


    原来的答案(下面,2010年6月)是关于手动选择你想存储的东西。

    Casebash评论道:

    这( stash --patch原始解决方案)很好,但我经常修改了很多文件,所以使用补丁很烦人

    bukzor的回答(upvoted,2011年11月)提出了一个更实用的解决方案,基于
    git add + git stash --keep-index
    去看看并提出他的答案,这应该是官方的答案(而不是我的答案)。

    关于该选项,chhh在评论中指出了另一种工作流程:

    你应该在这样一个git reset --soft之后“ git reset --soft ”来清除你的清理:
    为了达到原始状态 - 这是一个清晰的临时区域,只有一些选择性的非阶段性修改,可以轻松地重置索引以获得(不需要做任何类似bukzor的事情)。


    (原始答案2010年6月:手动藏匿)

    然而, git stash save --patch可以让你实现部分git stash save --patch

    使用--patch ,您可以交互式地从HEAD和正在运行的树之间的差异中选择要隐藏的块。
    存储条目的构建方式使其索引状态与存储库的索引状态相同,其工作树仅包含交互式选择的更改。 所选的更改将从您的工作树中回滚。

    但是,这将保存完整的索引(可能不是您想要的索引,因为它可能包含已经索引的其他文件)以及部分工作树(可能看起来像要存储的文件)。

    git stash --patch --no-keep-index
    

    可能更适合。


    如果 - --patch不起作用,手动过程可能会:

    对于一个或多个文件,中间解决方案将是:

  • 将它们复制到Git仓库之外
    (实际上,eleotlecram提出了一个有趣的选择)
  • git stash
  • 将它们复制回来
  • git stash #这次,只有你想要的文件被隐藏
  • git stash pop stash@{1} #重新应用所有文件修改
  • git checkout -- afile #在任何本地修改之前将文件重置为HEAD内容
  • 在那个繁琐的过程结束时,你将只有一个或几个文件被隐藏。

    链接地址: http://www.djcxy.com/p/609.html

    上一篇: Stash only one file out of multiple files that have changed with Git?

    下一篇: Stop EditText from gaining focus at Activity startup