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我怀疑会解决其中一些问题,但仍然会增加基本上需要的琐碎操作的复杂性。@Inigotouch 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)