藏到变化到特定的文件

我有一个很大的git项目,我愚蠢地将其导入到eclipse中并运行一个autoformat。 现在,项目中的每个文件都显示为已修改。 我宁愿恢复所有只有格式化的文件,而没有其他更改,而不是提交格式化的文件。 例如:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#   (commit or discard the untracked or modified content in submodules)

#     modified: dir/file1.cpp
#     modified: dir/file1.h
#     modified: dir/file2.cpp
#     modified: dir/file2.h
#     modified: dir/file3.cpp
#     modified: dir/file3.h
#     modified: dir/file4.cpp
#     modified: dir/file4.h

我知道file2.cppfile2.hfile3.cpp已经被内容修改过(即,不只是格式化)。 我想隐藏对这三个文件的更改,然后签出旧版本,以便我可以在之后重新应用这些文件的更改。 我宁愿避免这样的事情:

$ cp file2.cpp ~/tmp
$ git checkout blahblahblah
$ cp ~/tmp/file2.cpp .

如果有一个明显的方法可以做到这一点,不涉及隐藏,让我知道。 无论怎样完成工作。


您可以add要保留的更改的文件,然后stash其余文件并清除存储:

git add file2.cpp file2.h file3.cpp
git stash --keep-index

此时,您已经隐藏了不需要的更改。 如果您想永久摆脱它们,请运行:

git stash drop

现在你已经为file2.cpp提交了file2.cppfile2.hfile3.cpp 。 如果你想存储这些文件(而不是提交它们):

git reset
git stash

现在你将处于以前的提交阶段,只有这三个文件被隐藏起来。

更新:

Git的2.13及更高版本包含一个更直接的方式来隐藏特定文件git stash push ,作为VonC他回答说。


我知道file2.cppfile2.hfile3.cpp已经被内容修改过(即,不只是格式化)。
我想隐藏对这三个文件的更改,然后签出旧版本,以便我可以在之后重新应用这些文件的更改。

使用Git 2.13(2017年第2季度),git存储将正式存储特定文件的变化

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

请参阅托马斯Gummerer( tgummerer )提交9e14090,提交1ada502,提交df6bba0(2017年2月28日),并提交9ca6326,提交6f5ccd4,提交f5727e2(2017年2月19日)。
(由Junio C gitster合并 - gitster - 于2017年3月10日提交的44c3f09)

如现在所记录的:

为了快速制作快照,您可以省略“推送”。
在此模式下,不允许使用非选项参数来防止拼写错误的子命令生成不需要的存储。
对此的两个例外是stash -p ,它用作stash push -p和pathspecs的别名,在双连字符后允许--用于消歧。

当pathspec被赋予' git stash push '时,新的stash只记录与pathspec匹配的文件的修改状态
索引条目和工作树文件然后仅回滚到HEAD中的这些文件的状态,从而留下与pathspec完全不匹配的文件。

请注意,正如评论中的medmunds指出的那样, git stash将使用相对于git repo的根文件夹的路径。


一个不错的选择是使用交互式隐藏模式。

git stash --patch

它的工作原理大部分是交互式添加模式:您将看到一系列差异,显示您在工作树中所做的更改,并且您必须选择要存储哪些文件(或仅包含文件的某些部分!)其余的将保持不变。

man git-stash

使用--patch,您可以交互式地从HEAD和正在运行的树之间的差异中选择区块以进行隐藏。 存储条目的构建方式使其索引状态与存储库的索引状态相同,其工作树仅包含交互式选择的更改。 所选的更改将从您的工作树中回滚。 请参阅git-add(1)的“交互模式”部分,了解如何操作--patch模式。

就你而言,你将能够看到仅格式化的区块并单独存储它们,而不会失去你有意义的改变。

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

上一篇: Stash changes to specific files

下一篇: How do you tell git to stash the index only?