如何使用git stash来存储部分更改?

时间:2019-07-30 10:32:30

标签: git

我想存放一些文件,在这些文件中,有些文件我想完全存放,另一些文件我希望存放其中的一部分。

例如,假设我有以下文件:

  1. new_file_untracked_to_stash.txt
  2. new_file_untracked_not_to_stash.txt
  3. part_of_file_changes_to_stash.txt
  4. all_changes_to_stash.txt

前2个文件(1和2)是未跟踪的新文件。 跟踪了另外2个(3和4),其中一个(3)包含我要存储的几行,而我不想存储的几行,另一个文件(4)我想存储的所有行。 / p>

如何隐藏在这种情况下?

更新:如果存储特定文件,则可以使用git stash push -m _STASH_MESSAGE_ _PATH_1 _PATH_2 就我而言,我需要存储部分文件更改(例如,第1-20行已更改,但我只希望存储1-12行并保持13-20行可以工作)

2 个答案:

答案 0 :(得分:4)

在Git中,许多命令带有标志-p--patch。此标志使您可以与文件的certain parts而非整个对象进行交互。

git stash没什么不同。来自documentation on git stash;

  

使用--patch,您可以从HEAD和要隐藏的工作树之间的差异中交互选择块。存储项的构造应使其索引状态与存储库的索引状态相同,并且其工作树仅包含交互式选择的更改。然后,选定的更改将从工作树中回滚。

因此,就您而言,运行

git stash -p

然后以交互方式选择所需文件的部分即可。

有关在交互模式下使用命令的详细信息,请参阅git-add文档中标题为Interactive Mode的部分。

答案 1 :(得分:0)

git stash -p

是一种逐块检查更改的方法,可以让您决定哪些要隐藏,哪些不需要(与git add -p一样)(doc)。 / p>