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状态
关于分支备份