Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 Branch_Git Stash - Fatal编程技术网

Git 如何备份当前状态(包括未跟踪的文件),以便在需要时可以稍后检查它们

Git 如何备份当前状态(包括未跟踪的文件),以便在需要时可以稍后检查它们,git,git-branch,git-stash,Git,Git Branch,Git Stash,我目前正在进行提交 我有一些修改过的文件和未跟踪的文件 git reset --mixed HEAD~2 我想保留当前状态的备份,以备将来参考 我已经阅读并发现主要是使用隐藏 我想在当前阶段的任何文件都应该保存到储藏室。(包括未跟踪和不删除gitignore文件) 我发现git的藏品被使用了。它将保存当前状态以隐藏,并且在隐藏后将有一个干净的工作树 以下哪种方法可以使用git stash $ git stash save "my_stash" $ git git stash --inclu

我目前正在进行提交

我有一些修改过的文件和未跟踪的文件

git reset --mixed HEAD~2
我想保留当前状态的备份,以备将来参考

我已经阅读并发现主要是使用隐藏

我想在当前阶段的任何文件都应该保存到储藏室。(包括未跟踪和不删除gitignore文件)

我发现git的藏品被使用了。它将保存当前状态以隐藏,并且在隐藏后将有一个干净的工作树

以下哪种方法可以使用git stash

$ git stash save "my_stash" 

$ git git stash --include-untracked save "my_stash"

$ git stash --all save "my_stash"
然后我们再利用

$ git apply

如果可能的话,我想知道如何通过创建分支而不是隐藏来做同样的事情。

请注意,当你说“在当前阶段”,这意味着你显然不是这个意思。(
staged
在git语言中表示“在索引中”;这肯定不包括未跟踪的文件,也不包括对跟踪文件的未老化更改。)

至于使用什么命令,您不应该使用git stash save;它已被弃用,因此您应该改用
git stash push
。(
push
是默认设置,因此在创建隐藏时不必命名任何子命令。)

我不知道你想如何处理被忽略的文件是什么意思。如果要将被忽略的文件包含在隐藏中

git stash --all
如果您不希望被忽略的文件被隐藏(因此希望它们保留在工作树中)

当您
应用
隐藏时,您需要让git知道您希望恢复索引

git stash apply --index
请注意,这仅在stash apply进程不产生冲突时有效;对于这种用法,它不应该冲突,但是如果您应用于与创建存储位置不同的提交,它可以

要创建分支而不是隐藏,请执行以下操作:

这里有一个可以使用的快捷方式,因为隐藏实际上是一个具有特殊处理的引用的提交集合。因此,您可以像往常一样创建隐藏,然后

git checkout stash
git checkout -b my_branch
git stash drop
分支看起来会有点奇怪,因为stash以一种有点不寻常的方式使用合并来组装未跟踪、未老化和阶段化的更改集

如果您根本不想使用stash命令,那么就更难了。您只能提交暂存的更改,因此必须执行以下操作

git checkout -b my_branch
git commit -m "staged changes"
git commit -a -m "unstaged changes"
# if you want a commit with only the non-ignored
# untracked files
git add :/:
git commit -m "untracked files'
# if you want a single commit with all untracked
# files (ignored or not), then skip the previous
# command and run this; if you want a separate 
# commit for ignored files, run the previous
# command and *then* run this:
git add -f :/:
git commit -m "ignored files"
(请注意,您甚至可以将未分级、未跟踪和忽略的文件全部合并到一个提交中(虽然stash没有);但您确实必须单独提交阶段性更改,以便稍后准确恢复索引。)

然后您需要恢复工作状态并继续工作。要使用的确切命令取决于您运行的上述命令。首先,你要像巴恩奇一样从你的藏品中分离出来

git checkout --detach
然后使用阶段性更改恢复索引。如果您创建了所有4个提交,则

git reset --mixed HEAD~3
如果您只为未跟踪的文件创建了一个提交

git reset --mixed HEAD~2
(或者,如果您只为未过时的更改和未跟踪/忽略的文件创建了一个提交,则会是

git reset --mixed HEAD~1
或同等产品。)

然后将
头部
移离分支的剩余部分

git reset --soft HEAD~1
最后再次查看您的工作分支;e、 g.如果你从master开始

git checkout master
所有这些都完成后,您存储了所有与隐藏相同的信息;但是您仍然无法自动使用stash命令来帮助您,因此,将来如果要再次恢复该状态,您必须清理工作树,签出类似于stash的分支,然后再次重复整个分离/重置/签出过程


如果要将这些更改应用于不同的基本提交(存储库的库存功能),则必须首先将类似存储库的分支重新设置为新提交的基础,然后在那里恢复更改。

Mark的回答很好,因此我只需添加以下内容:


如果您发现自己经常处于这种情况,想要同时签出多个分支以比较更改并处理不同的更改,那么您可能需要使用。它们使签出多个分支变得很容易,而无需多个本地repo的开销(在磁盘上可能会非常昂贵)。您还可以使用工作树临时切换到另一个分支,做一些工作,然后回来,而不需要创建临时分支或记住您隐藏了一些更改。

这就是我要找的

我目前在硕士分支机构,我正在处理一些未老化的文件和一些未跟踪的文件。我想将当前状态保存到一个新分支中,作为将来的备份/参考

所以我做了
stash push——在当前状态下包含未跟踪的
,然后
创建并签出一个新分支
stash apply
,并通过
add-a
提交更改
来暂存所有文件。再次
返回主分支
,然后再次执行
隐藏应用

那里

$ 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)

    modified:   filename1

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    filename2

no changes added to commit (use "git add" and/or "git commit -a")

$ git stash push --include-untracked

One stash is run

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

$ git checkout -b backup_branch
Switched to a new branch 'backup_branch'

$ git stash apply
On branch backup_branch


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)

    modified:   filename1

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    filename2


$ git status
On branch backup_branch


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)

    modified:   filename1

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    filename2

$ git add -A

$ git commit -m "Saved for backup"

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

$ git stash apply
On branch origin/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)

    modified:   filename1

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    filename2

$ git status
On branch origin/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)

    modified:   filename1

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    filename2
$git状态
论分行行长
未为提交而暂存的更改:
(使用“git add…”更新将提交的内容)
(使用“git签出--…”放弃工作目录中的更改)
修改:filename1
未跟踪的文件:
(使用“git add…”包含在将提交的内容中)
文件名2
未向提交添加任何更改(使用“git add”和/或“git commit-a”)
$git隐藏推送--包括未跟踪
有一个藏匿处
$git状态
论分行行长
您的分支机构是最新的“来源/主”。
没什么要承诺的,正在清理树
$git签出-b备份分支
切换到新分支“备份分支”
$git藏匿申请
论分支备份
未为提交而暂存的更改:
(使用“git add…”更新将提交的内容)
(使用“git签出--…”放弃工作目录中的更改)
修改:filename1
未跟踪的文件:
(使用“git add…”包含在将提交的内容中)
文件名2
$git状态
关于分支备份