我有一个大型git项目,我愚蠢地将其导入eclipse并运行了自动格式化。现在,项目中的每个文件都显示为已修改。与其提交我的格式化文件,我宁愿恢复所有我只格式化过且没有其他更改的文件。例如:
$ 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
我知道那是文件2。cpp文件2。h和文件3。已使用内容(即,不只是格式化)修改了cpp。我想隐藏对这三个文件的更改,然后签出一个旧版本,这样我就可以在之后重新应用对这些文件的更改。我宁愿避免这样的事情:
$ cp file2.cpp ~/tmp
$ git checkout blahblahblah
$ cp ~/tmp/file2.cpp .
如果有一种明显的方法不涉及藏匿,请告诉我。无论什么都能完成任务。
一个不错的选择是使用交互式隐藏模式。
git stash --patch
它的工作方式主要类似于交互式添加模式:您将看到一系列差异,显示您在工作树中所做的更改,并且您必须选择要隐藏的文件(或仅文件的某些部分!),其余部分将保持不变。
从man git stash:
使用--patch,您可以从头部和工作树之间的差异中交互选择要隐藏的大块。隐藏项的构造使其索引状态与存储库的索引状态相同,其工作树仅包含您以交互方式选择的更改。然后从工作树中回滚选定的更改。请参阅git add(1)的“交互模式”部分,了解如何操作--patch模式。
在您的情况下,您将能够只看到大块的格式并将其单独隐藏,而不会丢失有意义的更改。
我知道file2.cpp
、file2. h
和file3.cpp
已经被修改了内容(即,不仅仅是格式化)。
我想隐藏对这三个文件的更改,然后签出旧的修订,这样我就可以在之后重新应用对这些文件的更改。
使用Git 2.13(Q2 2017),git stash将正式有一种方法来存储特定文件的更改
git stash push [--] [<pathspec>...]
请参阅Thomas Gummer的commit 9e14090、commit 1ada502、commit df6bba0(2017年2月28日)和commit 9ca6326、commit 6f5ccd4、commit f5727e2(2017年2月19日)(tgummerer)
(由Junio C Hamano--gitster在commit 44c3f09中合并,2017年3月10日)
如现在记录的:
为了快速制作快照,可以省略“推送”<在这种模式下,不允许使用非选项参数来防止拼写错误的子命令进行不必要的隐藏
这有两个例外,分别是用作隐藏推送的别名的隐藏-p和路径规范,它们可以在双连字符后进行消歧。
当路径规范被赋予“
git stash ush
”时,新存储仅为与路径规范匹配的文件记录修改后的状态。
索引条目和工作树文件随后也仅为这些文件回滚到HEAD
中的状态,保留与路径规范不匹配的文件完好无损。
注意,正如medmunds在评论中指出的那样,git stash将使用相对于git repo根文件夹的路径。
使用Git 2.26(2020年第2季度),“
Git rm”和“
Git stash”学习新的“
--pathspec from file
”选项。
如果您有一个文件列表要保存在filesToStash中。txt,那么这就足够了:
git stash --pathspec-from-file=filesToStash.txt` is enough.
您可以添加带有要保留更改的文件,然后隐藏其余文件并清除隐藏:
git add file2.cpp file2.h file3.cpp
git stash --keep-index
此时,您已经隐藏了不需要的更改。如果您想永久摆脱它们,请运行:
git stash drop
现在您有了file2.cpp
、file2. h
和file3.cpp
暂存以供提交。如果您想隐藏这些文件(而不是提交它们):
git reset
git stash
现在您将处于之前的提交中,只有这三个文件被隐藏。
更新:
正如VonC在他的回答中解释的那样,Git 2.13及更高版本包括一种更直接的方法来使用git stash ush
隐藏特定文件。
Linux 下,名称中第一个字符为 . 的文件或者文件夹,系统会将它们隐藏起来。传统上,这种文件大多是用户的配置文件。 您可以尝试以下操作: cd ~ #进入您的用户目录 ls #查看当前目录下的文件列表 ls -a #查看所有文件的文件列表(包括隐藏文件)。 如果您只想查看隐藏文件,而不包括这两个特殊目录,您可以使用 ls 命令的选项 -A (ls -A) 每个目录下都包含
新反应: 我有一个 组件,我只想在用户访问特定页面时隐藏该组件。 App.JS: main.js:
我想对@everyone隐藏一个频道,然后向某些特定成员授予权限,这些成员可以访问该频道。如何将该权限/规则添加到频道?
我确实有一些独特的要求,我想隐藏要从特定角色用户中选择的角色。 例如,我有一个角色名称admin、部门1、部门2和部门3。作为管理员,我应该只能在门户中看到部门1、部门2和部门3的角色管理。 但如果我为管理员定义权限,他/她可以管理角色。管理员用户可以查看Liferay中可用OOTB的所有角色。 有人能帮我配置一下吗?
我有一个bat文件,它启动了一个程序,并且已经输入了我的用户名和密码,我必须让cmd打开,程序才能运行。我想隐藏cmd窗口,以防止我意外关闭,下面是代码: 我需要把这个藏起来,但是在我想要的时候出现在任务管理器中关闭...谢谢
我目前正在使用Java服务包装器。它工作得很好,我可以使用我的可执行jar将其作为服务安装,甚至在将其作为服务安装时传递VM参数。 但由于这将在这里和那里部署,我想知道如何防止人们检索Jar文件中的源文件。这可能吗?我正在考虑将jar文件转换为。exe文件,并将其作为这样的服务安装,因为我发现有几个工具能够做到这一点。但他们似乎不允许我传递VM参数。 有人知道我该怎么做吗?