Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何隐藏工作树的完整状态,包括已忽略、未跟踪、暂存和/或未暂存的文件?_Git_Git Stash - Fatal编程技术网

Git 如何隐藏工作树的完整状态,包括已忽略、未跟踪、暂存和/或未暂存的文件?

Git 如何隐藏工作树的完整状态,包括已忽略、未跟踪、暂存和/或未暂存的文件?,git,git-stash,Git,Git Stash,我有一个客户,他做了一堆乱七八糟的事情,我想把它们藏起来,这样我就有了一个原始的状态,但可以在以后再回到乱七八糟的状态。我想隐藏并恢复的内容可能包括: .gitignore 新的未跟踪文件 新的、已跟踪但未暂存的文件(即git add-N) 已暂存但未提交的文件 等等 等等 等等 简而言之,我想要的效果与使用gitclone创建新客户机并在那里完成工作所获得的效果相同,但都在同一个客户机中 编辑:一种特殊情况,如git stash-a无法实现我想要的: touch new_file git

我有一个客户,他做了一堆乱七八糟的事情,我想把它们藏起来,这样我就有了一个原始的状态,但可以在以后再回到乱七八糟的状态。我想隐藏并恢复的内容可能包括:

  • .gitignore
  • 新的未跟踪文件
  • 新的、已跟踪但未暂存的文件(即
    git add-N
  • 已暂存但未提交的文件
  • 等等
  • 等等
  • 等等
简而言之,我想要的效果与使用
gitclone
创建新客户机并在那里完成工作所获得的效果相同,但都在同一个客户机中


编辑:一种特殊情况,如
git stash-a
无法实现我想要的:

touch new_file
git add -N new_file
git stash -a

这会导致一个错误,并使
隐藏
什么都不做。

可以使用
git stash-a
隐藏所有被跟踪、未跟踪和忽略的文件。这是
git stash
提供的最完整的选项

如果您需要更复杂的功能,或者需要其他功能,例如保留可执行位以外的权限,那么您将不得不求助于将文件复制到另一个目录或使用
tar


您还可以使用
git branch
创建另一个具有相同历史记录的分支,并使用
git worktree
将其签出到其他地方,然后将文件复制到其他地方。

将整个内容复制到其他地方是否可行?如果有帮助的话,你可以区分目录。
git-stash
在我看来不是一个很好的工具
git worktree add
更好,只要您的git至少是2.15版。制作一个新的克隆是唯一100%完美的解决方案。请注意,您可以克隆您的克隆,以加快速度,然后使用
git-remote-add
git-remote-set-url
添加第二个远程或更改与
origin
remote关联的url,然后使用
git-fetch
@Inigo我读过文档,只是没有谈论它。我提到的事情列表是我的调查没有找到干净的解决方案的事情列表,或者(例如,
git add-N
)没有找到任何解决方案的事情列表而且,不,它不是开放式的,如果git没有一个专门用于此的功能,那么我要找的是一个关于这一缺陷的精确声明,我将克隆另一个客户端,而不是做任何其他复杂的黑客解决方法,@torek,我已经在使用备用远程设备的额外客户端。我没有找到一个理想解决方案的原因是:1)它们固有地添加了另一个要管理的东西(我是否将所有的分支/所有地方都拉入git中?),2)它们的管理更复杂(您是否知道如何在远程位置上隐藏/弹出git?)3)它强制文件位于不同的操作系统路径,(这有一些优点,但也会增加上下文切换成本).--git worktree我怀疑会解决其中一些问题,但仍然会增加基本上需要的琐碎操作的复杂性。@Inigo
touch new_file;git add-N new_file;git stash push-a
->错误我提到的一个案例导致
git stash-a
拒绝隐藏任何东西:
touch new_file;gitadd-N new_file;git stash-a
-->导致
错误:条目“new_file”不是最新的。无法合并。无法保存当前工作树状态
这是git stash可用的唯一功能,它可以做任何接近您想要的事情。如果您使用
--意图添加
,您告诉git您要添加它,因此如果如果您想使用该对象创建一个提交(即隐藏提交),您实际上必须执行并添加它。因此,
git stash
这一事实是以提交的形式实现的(就我想要实现的内容而言,这是100%无关的)是不是妨碍了我?我可以接受,虽然我希望得到一个更好的答案。是的,这是你的问题。如果你愿意,欢迎你向Git列表报告这个问题。我不认为我会让他们重新实现
Git stash
而不是在提交方面。如果我有机会让他们从根本上改变操作nal model git,这不是我首先要说的:0)