在使用Git进行更改的多个文件中,只能存储一个文件?


3066

如何仅将分支中多个已更改文件之一存储?


109
我不认为@bukzor接受的答案是对所提问题的正确答案。git stash --keep-index确实保留了索引,但是却隐藏了所有内容 –无论是索引内还是索引外。
拉曼2013年

@Antonio在我看来,您的悬赏实际上应该是一个单独的问题,因为原始问题与TortoiseGit没有任何关系。
JesusFreke

1
@JesusFreke是的,鉴于结果,我本可以省去50个代表:)如果您尝试搜索“部分藏匿的tortoisegit”,这就是您被重定向到的问题。Tortoisegit似乎不是这里的热门话题stackoverflow.com/questions/tagged/tortoisegit
Antonio

7
>>>>>>>>> git diff -- *filename* > ~/patch然后git checkout -- *filename*,以后您可以使用git apply ~/patch
neaumusic

36
以下大多数现有答案已过时。从Git 2.13(2017年第二季度)开始,它受支持git stash push [--] [<pathspec>...]
Ohad Schneider

Answers:


1372

免责声明:以下答案适用于git 2.13之前的git。对于git 2.13及更高版本,请进一步查找其他答案


警告

正如评论中所指出的,这会将所有内容(无论已上演还是未上演)都置于藏匿处。在隐藏之后,--keep-index仅保留索引。当您稍后弹出存储时,这可能导致合并冲突。


这将存储您以前未添加的所有内容。只是git add要保留的内容,然后运行它。

git stash --keep-index

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

  1. git rebase -i <last good commit>
  2. 将一些更改标记为edit
  3. git reset HEAD^
  4. git add <files you want to keep in this change>
  5. git stash --keep-index
  6. 根据需要进行修复。不要忘记git add任何更改。
  7. git commit
  8. git stash pop
  9. 根据需要从#5重复。
  10. git rebase --continue

47
我发现这种方法更加简单:stackoverflow.com/a/5506483/457268
k0pernikus 2012年

561
我不确定为什么要对此表示反对。每个人都必须有与我不同的期望。最初的帖子问“我如何只存储部分未提交的更改?” 当我使用时git stash save -k,是的,索引(在中的绿色git stat)被保留,但是整个变更集(绿色和红色)都进入存储区。这违反了OP的要求,“仅存储一些更改”。我只想藏一些红色(以备将来使用)。
Pistos

70
如果您对@Pistos提出的问题的答案更感兴趣(就像我以前一样),请看这里:stackoverflow.com/questions/5506339/…–
Raman

27
@Raman:太好了! git stash -p正是我想要的。我想知道是否仅在最近才添加了此开关。
Pistos

14
警告:git stash --keep-index已损坏。如果您进行更多更改,请稍后尝试git stash pop合并冲突,因为隐藏文件包含您保留的更改文件,而不仅仅是您未保留的文件。例如:因为我要测试A中的更改,所以我更改文件A和B,然后隐藏B。我发现A问题,然后解决;我犯了A; 现在,我无法取消隐藏,因为旧版本的A处于隐藏状态,没有充分的理由导致合并冲突。在实践中,A和B可能有很多文件,甚至可能是二进制映像之类的东西,所以我基本上必须放弃并丢失
B。– rjmunro

3014

您也可以使用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

5
不是。事发大约7年后,它是从Darcs借来的。
2014年

6
我是TortoiseGit上瘾者。但是TortoiseGit不支持stash -p。我之所以能回答这个问题,是因为它仍然是最具交互性/用户友好性的。
Antonio

27
您可能要添加:git stash save -p my stash message; 因为参数的顺序不是很直观...
Chris Maes

15
在此与之间git log -p,我认为该-p标志必须表示“做我想做的很酷的事情,但不知道如何表达”。
凯尔·斯特兰德

2
为什么这个好答案在第12位?毕竟是0,+ 1,+ 2个答案??????
DenisFLASH

545

由于git从根本上讲是管理所有存储库内容和索引(而不是一个或多个文件)git stash,因此毫不奇怪地进行交易,与所有工作目录

实际上,从Git 2.13(2017年第二季度)开始,您可以使用以下方式存储单个文件git stash push

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

pathspec给' git stash push'时,新存储区仅记录与pathspec匹配的文件的修改状态。有关更多信息,请参见“存储到特定文件的更改 ”。

简化示例:

 git stash push path/to/file

此功能的测试案例显示了更多选项:

test_expect_success 'stash with multiple pathspec arguments' '
    >foo &&
    >bar &&
    >extra &&
    git add foo bar extra &&

    git stash push -- foo bar &&   

    test_path_is_missing bar &&
    test_path_is_missing foo &&
    test_path_is_file extra &&

    git stash pop &&
    test_path_is_file foo &&
    test_path_is_file bar &&
    test_path_is_file extra

最初的答案(2010年6月以下)是关于手动选择要隐藏的内容。

Casebash评论:

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

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

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

您应该git reset --soft在这样的存储之后进行恢复,
以恢复清晰的状态:为了恢复原始状态-这是一个清晰的过渡区域,并且只有部分未分级的选择修改,才能轻柔地重置索引以获取(无需承诺像你一样-布克佐-做了)。


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

但是,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内容

在这个相当繁琐的过程结束时,您将只能保存一个或几个文件。


3
很好,但是我经常修改很多文件,因此使用补丁很烦人
Casebash11 2011年

6
@VonC:每个答案只有一个答案是一种好风格。同样,将他人的答案复制粘贴到您自己的举止中也是不好的方式。
bukzor 2011年

3
@bukzor:很抱歉,如果我编辑的答案似乎不正确。我唯一的目的是让您的答案更具知名度。我再次编辑了我的帖子,以使意图更加清晰。
VonC

1
@卡尔:是的,stackoverflow.com / a / 13941132/6309 建议git reset(混合)
VonC

3
git is fundamentally about managing a all repository content and index and not one or several files-实施方式掩盖了要解决的问题;这只是一个解释,而不是正当的理由。任何源代码控制系统都是关于“管理多个文件”的。只要看看哪些评论最受好评。
维克多·谢尔琴科

90

git stash -p(或git add -p使用stash --keep-index)太麻烦时,我发现它更易于使用diffcheckout并且apply

要仅“存储”特定文件/目录:

git diff path/to/dir > stashed.diff
git checkout path/to/dir

然后呢

git apply stashed.diff

1
git add -p我在上面自己的回答中提到的有趣的替代方法。+1。
VonC 2014年

11
请注意,如果您有二进制文件(如PNG),则不会将其输出到diff文件。因此,这不是100%的解决方案。
void.pointer 2014年

1
@RobertDailey:这是一个有趣的问题对我来说,因为git diff > file.diffgit apply是我平时的部分藏匿工具。我可能不得不考虑切换到git stash -p更大的变更集。
thekingoftruth 2014年

1
@thekingoftruth这是我用来创建补丁文件的别名,它确实支持二进制文件:patch = log --pretty=email --patch-with-stat --reverse --full-index --binary。请注意,但是,这需要您进行更改才能提交补丁。
void.pointer 2014年

2
如果要存放的文件类似,这对我来说不是很干净../../foo/bar.txt。该修补程序会生成OK,但是我随后需要移至存储库根目录才能应用该修补程序。因此,如果您对此有疑问-只需确保从存储库根目录进行即可。
Michael Anderson

86

使用git stash push,如下所示:

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

例如:

git stash push -- my/file.sh

自2017年春季发布的Git 2.13开始可用。


1
但是,我确实git stash push在5个月前的去年3月的回答中提到了这一点。我在这里详细介绍了新的Git 2.13命令:stackoverflow.com/a/42963606/6309
VonC

我很高兴Git如此迅速地前进,很长一段时间都不可能,然后发布了2.13,突然有一个简单的解决方案可用!
sandstrom '18

1
@VonC是对的,您还提到了正确的答案,但是,在两个答案之间,这个答案更易于阅读(没有混淆的文字,并且还有一个示例)。也许他们应该编辑您的答案
Utopik '18

@Utopik您让我说“您是对的” ...但是,是的,我已经编辑了答案以包含示例。
VonC '18

难道有人用它git stash apply来恢复隐匿的变化吗?
乍得

49

假设您有3个档案

a.rb
b.rb
c.rb

并且您只想隐藏b.rb和c.rb而不是a.rb

你可以做这样的事情

# commit the files temporarily you don't want to stash
git add a.rb
git commit -m "temp" 

# then stash the other files
git stash save "stash message"

# then undo the previous temp commit
git reset --soft HEAD^
git reset

您完成了!HTH。


29

另一种方法是:

# Save everything
git stash 

# Re-apply everything, but keep the stash
git stash apply

git checkout <"files you don't want in your stash">

# Save only the things you wanted saved
git stash

# Re-apply the original state and drop it from your stash
git stash apply stash@{1}
git stash drop stash@{1}

git checkout <"files you put in your stash">

在我(再次)进入此页面后,我想到了这个问题,并且不喜欢前两个答案(第一个答案只是不回答问题,而且我不太喜欢使用-p交互方式)。

这个想法与@VonC在存储库外部使用文件的建议相同,您可以将所需的更改保存在某个位置,删除不需要的更改,然后重新应用移开的更改。但是,我将git stash用作“某处”(结果,最后还有一个额外的步骤:删除您放入stash的cahnges,因为您也将它们移开了)。


1
我最喜欢这种方法。它仅使用隐藏和还原命令即可在tortoisegit中提供简单的工作流程。
Mark Ch'2

建议不要使用职位引用SO的答案。排名随着评级的变化而变化。
布莱恩·阿什

2
@BryanAsh好吧,这并不重要。我讲的是一则轶事,而不是真正提及其他答案。信息是我不喜欢社区喜欢的答案,也不喜欢这些答案的实际含义。此外,第二个和第三个答案之间的900票差距使得这种情况在不久的将来不太可能改变,如果应该改变,我总是可以将其编辑为“当时的答案最高”。真的,在这种情况下,我看不出这是什么问题。
Jasper

23

更新(2/14/2015)-我稍微重写了一下脚本,以更好地处理冲突的情况,现在应将其显示为未合并的冲突,而不是.rej文件。


我经常发现与@bukzor方法相反的做法更直观。也就是说,先进行一些更改,然后仅存储那些已进行的更改。

不幸的是,git没有提供git stash --only-index或类似的东西,所以我整理了一个脚本来实现这一点。

#!/bin/sh

# first, go to the root of the git repo
cd `git rev-parse --show-toplevel`

# create a commit with only the stuff in staging
INDEXTREE=`git write-tree`
INDEXCOMMIT=`echo "" | git commit-tree $INDEXTREE -p HEAD`

# create a child commit with the changes in the working tree
git add -A
WORKINGTREE=`git write-tree`
WORKINGCOMMIT=`echo "" | git commit-tree $WORKINGTREE -p $INDEXCOMMIT`

# get back to a clean state with no changes, staged or otherwise
git reset -q --hard

# Cherry-pick the index changes back to the index, and stash.
# This cherry-pick is guaranteed to succeed
git cherry-pick -n $INDEXCOMMIT
git stash

# Now cherry-pick the working tree changes. This cherry-pick may fail
# due to conflicts
git cherry-pick -n $WORKINGCOMMIT

CONFLICTS=`git ls-files -u`
if test -z "$CONFLICTS"; then
    # If there are no conflicts, it's safe to reset, so that
    # any previously unstaged changes remain unstaged
    #
    # However, if there are conflicts, then we don't want to reset the files
    # and lose the merge/conflict info.
    git reset -q
fi

您可以将上面的脚本保存在git-stash-index路径中的某个位置,然后可以将其作为git stash-index调用

# <hack hack hack>
git add <files that you want to stash>
git stash-index

现在,存储区包含一个新条目,其中仅包含您已暂存的更改,而工作树仍包含所有未暂存的更改。

在某些情况下,工作树更改可能取决于索引更改,因此,当您存储索引更改时,工作树更改会发生冲突。在这种情况下,您将获得通常的未合并冲突,可以使用git merge / git mergetool / etc解决。


推荐pushd的替代cdpopd在脚本,如果脚本成功结束后,用户在同一个目录中运行它之前结束。
内特2015年

1
@Nate:据我所知,它仅应在用户获取脚本的情况下更改用户的目录。如果您正常运行脚本(〜/ bin / git-stash-index)或通过git(git stash-index)运行该脚本,则会在单独的终端会话中运行该脚本,并且该会话中任何工作目录的更改都不会影响用户终端会话中的工作目录。如果不是这样,您是否知道一个常见的用法情况?(除了提供脚本外,我不会认为这是“常见的”)
JesusFreke

20

如果您不想指定带有隐藏更改的消息,请在双破折号后传递文件名。

$ git stash -- filename.ext

如果是未跟踪/新文件,则必须先上载它。

此方法在git版本2.13+中有效


这个答案很冗长,这很简洁。如果它可以帮助某人,我会离开。此页面上没有人提及这种语法和结果-而是提及git stash push。
本地人

这是我一直在寻找的答案。谢谢!+1
nicodp

19

由于在Git中创建分支很简单,因此您只需创建一个临时分支并将单个文件签入其中即可。


2
您无法使用未进行的修改创建分支。您可以轻松地将所有编辑移至新分支(隐藏/隐藏弹出),然后回到第一个正方形:如何仅使用其中一些编辑来测试分支,而又不丢失其他编辑?
bukzor 2011年

7
如果您有本地更改,则无法切换分支。但是,您可以创建一个新分支并有选择地添加/提交文件,然后创建另一个分支并以递归方式进行操作...然后签出原始分支并有选择地合并回去。我就是这样做的。实际上,这似乎是一种自然的处理方式,因为您实际上是在创建要素分支。
iain 2012年

3
@iain如果您有本地更改,则可以切换分支,只要它们不需要合并即可。参见示例要点。至少从Git v2.7.0起是如此。
Colin D Bennett

18

您可以简单地做到这一点:

git stash push "filename"

或带有可选消息

git stash push -m "Some message" "filename"

1
这没有增加任何新内容。已经在多个答案中提到了Git藏物推送
JesusFreke,

12

将以下代码保存到一个名为的文件中stash。用法是stash <filename_regex>。参数是文件完整路径的正则表达式。例如,隐藏a / b / c.txt stash a/b/c.txtstash .*/c.txt,等等。

$ chmod +x stash
$ stash .*.xml
$ stash xyz.xml

复制到文件中的代码:

#! /usr/bin/expect --
log_user 0
set filename_regexp [lindex $argv 0]

spawn git stash -p

for {} 1 {} {
  expect {
    -re "diff --git a/($filename_regexp) " {
      set filename $expect_out(1,string)
    }
    "diff --git a/" {
      set filename ""
    }
    "Stash this hunk " {
      if {$filename == ""} {
        send "n\n"
      } else {
        send "a\n"
        send_user "$filename\n"
      }
    }
    "Stash deletion " {
      send "n\n"
    }
    eof {
      exit
    }
  }
}

2
很棒的方法。我会选择这个作为答案。给未来读者的提示:您必须完全匹配。例如stash subdir / foo.c
er0 2014年

12

万一您实际上是在每次使用时放弃更改git stash(并且不要真正使用git stash临时存储它),在这种情况下,您可以使用

git checkout -- <file>

[ 注意 ]

git stash只是分支和做事的一种更快,更简单的选择。


8

VonC将文件复制到Git仓库外部的“中间”解决方案的问题在于,您丢失了路径信息,这使得稍后又很麻烦地将一堆文件复制回去。

发现使用tar(可能会使用类似的工具)而不是使用副本更容易:

  • tar cvf /tmp/stash.tar路径/到/某些/文件路径/到/一些/其他/文件(...等)
  • git checkout路径/到/某些/文件路径/到/一些/其他/文件
  • git stash
  • 焦油xvf /tmp/stash.tar
  • 等(请参见VonC的“中级”建议)

checkout -f不需要,checkout(没有-f)就足够了,我已经更新了答案。
eleotlecram 2011年

8

有时,在提交之前,我已经对分支进行了不相关的更改,并且我想将其移至另一个分支并分别提交(例如master)。我这样做:

git stash
git checkout master
git stash pop
git add <files that you want to commit>
git commit -m 'Minor feature'
git stash
git checkout topic1
git stash pop
...<resume work>...

请注意,第一个stashstash pop可以消除,您可以master在结帐时将所有更改带到分支,但前提是不存在冲突。另外,如果要为部分更改创建新分支,则将需要存储。

您可以假设没有冲突且没有新分支来简化它:

git checkout master
git add <files that you want to commit>
git commit -m 'Minor feature'
git checkout topic1
...<resume work>...

甚至不需要藏匿...


8

使用SourceTree,只需3个步骤即可轻松完成此操作。

  1. 暂时提交您不想藏起来的所有东西。
  2. Git添加所有其他内容,然后将其隐藏。
  3. 通过运行git reset弹出临时提交,在临时提交之前定位提交。

在SourceTree中只需几秒钟即可完成所有操作,您可以在其中单击要添加的文件(甚至单个行)。添加后,只需将其提交到临时提交即可。接下来,单击复选框以添加所有更改,然后单击存储以存储所有内容。随着隐藏的更改的进行,请浏览您的提交列表,并在临时提交之前记下该提交的哈希,然后运行“ git reset hash_b4_temp_commit”,这基本上就像是通过将分支重置为在它之前提交。现在,您只剩下了不想藏起来的东西。



7

这里的每个答案都很复杂...

那要“藏起来”呢?

git diff /dir/to/file/file_to_stash > /tmp/stash.patch
git checkout -- /dir/to/file/file_to_stash

这将弹出的文件更改回:

git apply /tmp/stash.patch

与存放一个文件然后将其弹出回来完全相同。


我尝试了,但是什么也没发生。当我git apply没有错误但更改也没有恢复时
ClementWalter '17

您在/ tmp中生成的补丁文件可能已删除。您可能已在差异和应用之间重新启动。尝试另一个更永久的位置。确实有效。还要检查补丁文件的内容。
Christophe Fondacci'4

4

我已经审查了有关此问题以及许多类似主题的答案和评论。请注意,以下命令均不正确,无法存储任何特定的已跟踪/未跟踪文件

  • git stash -p (--patch):手动选择大块,不包括未跟踪的文件
  • git stash -k (--keep-index):存储所有已跟踪/未跟踪的文件,并将其保存在工作目录中
  • git stash -u (--include-untracked):存放所有跟踪/未跟踪的文件
  • git stash -p (--patch) -u (--include-untracked):无效的命令

当前,能够存储任何特定已跟踪/未跟踪文件的最合理方法是:

  • 临时提交您不想隐藏的文件
  • 添加并隐藏
  • 弹出临时提交

在回答另一个问题时我为此过程编写了一个简单的脚本,在此处的SourceTree中执行该过程的步骤


4

本地更改:

  • file_A(已修改)未上演
  • 未上载file_B(已修改)
  • file_C(已修改)未上演

要创建仅在file_C上进行更改的存储“ my_stash” :

1. git add file_C
2. git stash save --keep-index temp_stash
3. git stash save my_stash
4. git stash pop stash@#{1}

做完了


说明

  1. file_C添加到暂存区
  2. 创建一个名为“ temp_stash”的临时存储并将更改保存在file_C上
  3. 仅使用file_C上的更改来创建所需的存储(“ my_stash”)
  4. 在本地代码上应用“ temp_stash”(file_A和file_B)中的更改并删除存储

您可以在步骤之间使用git status查看发生了什么。


3

当您尝试在两个分支之间切换时,会发生这种情况。

尝试使用“ git add filepath” 添加文件。

稍后执行此行

git stash --keep-index


3

要隐藏单个文件,请使用git stash --patch [file]

这将提示:Stash this hunk [y,n,q,a,d,j,J,g,/,e,?]? ?。只需键入a(将此块以及所有以后的块存储在文件中)就可以了。


缺少push的内容git stash push --patch [file]
Filipe Esperandio '18 -10-2

@FilipeEsperandio push仅适用于Git的较新版本,该版本以前是save。无论哪种情况,push或通过save以下方式隐含stash:“没有任何参数的情况下调用git stash等效于git stash push”,文档
patrick

2

类似的情况。确实提交并意识到这不行。

git commit -a -m "message"
git log -p

根据答案,这对我有所帮助。

# revert to previous state, keeping the files changed
git reset HEAD~
#make sure it's ok
git diff
git status
#revert the file we don't want to be within the commit
git checkout specs/nagios/nagios.spec
#make sure it's ok
git status
git diff
#now go ahead with commit
git commit -a -m "same|new message"
#eventually push tu remote
git push

2

在这种情况下,我git add -p(交互式),git commit -m blah然后根据需要存储剩余的内容。


2

我不知道如何在命令行上执行此操作,仅使用SourceTree。假设您已经更改了文件A,并且在文件B中具有两个更改块。如果您只想将文件B中的第二个块存储在文件中,而其他所有文件都保持不变,请执行以下操作:

  1. 登台一切
  2. 对工作副本执行更改,以撤消文件A中的所有更改。(例如,启动外部diff工具并使文件匹配。)
  3. 使文件B看起来好像仅对其进行了第二次更改。(例如,启动外部差异工具并撤消第一个更改。)
  4. 使用“保持分段的更改”创建存储。
  5. 撤消一切
  6. 做完了!

2
git add .                           //stage all the files
git reset <pathToFileWillBeStashed> //unstage file which will be stashed
git stash                           //stash the file(s)
git reset .                         // unstage all staged files
git stash pop                       // unstash file(s)

1
好吧,你不应该那样做。该答案应提供一个解决问题的办法。您可以问自己的问题。
L_J

此解决方案是此问题最简单的答案之一。阅读问题,比较所有答案,然后找出答案,如果您怀疑该答案既不是适用的解决方案,也不是有关该问题的足够信息,那么我们可以再谈一次。
celikz

这将不起作用,因为第三个命令“ git stash”将不支持暂存文件。已暂存和未暂存的文件都将被保存。这些问题专门询问如何仅存储一个文件
Cyber​​Prodigy

0

一种复杂的方法是首先提交所有内容:

git add -u
git commit // creates commit with sha-1 A

重置回原始提交,但从新提交中检出the_one_file:

git reset --hard HEAD^
git checkout A path/to/the_one_file

现在,您可以存储the_one_file:

git stash

通过将提交的内容保存在文件系统中,同时重置为原始提交来进行清理:

git reset --hard A
git reset --soft HEAD^

是的,有点尴尬...


0

我找不到我需要的答案,这很容易:

git add -A
git reset HEAD fileThatYouWantToStash
git commit -m "committing all but one file"
git stash

这正好存储了一个文件。


0

快速回答


要在git中还原特定的更改文件,可以执行以下行:

git checkout <branch-name> -- <file-path>

这是一个实际的示例:

git checkout master -- battery_monitoring/msg_passing.py


0

如果您想存放一些更改的文件,只需

Stage中添加您不想隐藏的文件,然后执行git stash save --keep-index

它将存储所有未暂存的已更改文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.