Git 暂存命令使用-git stash

内容纲要

1. 问:git 如何将当前分支的修改暂存起来,然后切换到另外一个分支修改代码,然后再切换回原分支恢复修改内容

答:Git 提供了 git stash 命令来帮助您将当前分支的修改暂存起来,然后切换到另外一个分支修改代码,然后再切换回原分支恢复修改内容。

步骤如下:
在终端或命令行中进入你的 Git 项目目录。
使用 git status 命令查看当前分支的修改状态。
使用 git stash 命令将当前分支的修改暂存起来。
使用 git checkout 命令切换到另外一个分支。
在另外一个分支上进行相应的操作,比如添加、修改、删除文件等。
操作完成后,使用 git checkout 命令切换回原分支。
使用 git stash list 命令查看保存的暂存。
使用 git stash apply 命令恢复暂存的修改。
示例:
假设你当前处于名为 master 的分支,并且已经对该分支进行了一些修改。你想要切换到 feature 分支进行修改,然后再切换回 master 分支恢复修改。

# 查看当前分支的修改状态
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:   README.md

# 将当前分支的修改暂存起来
git stash
# 输出:
# Saved working directory and index state on 'stash@{0}'

# 切换到另外一个分支
git checkout feature
# 输出:
# Switched to branch 'feature'

# 在另外一个分支上进行相应的操作
# ...

# 切换回原分支
git checkout master
# 输出:
# Switched to branch 'master'

# 查看保存的暂存
git stash list
# 输出:
# stash@{0}: WIP on master: 1 file changed, 1 insertion(+)

# 恢复暂存的修改
git stash apply
# 输出:
# Reinstate working directory changes from 'stash@{0}'
# (nothing to commit, working tree clean)

注意:
git stash 命令不会将暂存的修改提交到仓库中。
使用 git stash apply 命令恢复暂存的修改后,你需要手动提交修改。
你可以使用 git stash drop 命令删除暂存的修改。
其他选项:
你可以使用 -m 选项为暂存的修改添加说明。
git stash -m "WIP on feature branch"
你可以使用 -u 选项在恢复暂存的修改时同时更新工作目录的索引文件。
git stash apply -u
通过这些步骤,你应该能够成功地将当前分支的修改暂存起来,然后切换到另外一个分支修改代码,然后再切换回原分支恢复修改内容。

2. git stash 不能将没有add的文件暂存起来吗

答:是的,git stash 不能将没有 add 的文件暂存起来。
git stash 命令的工作原理是将当前工作目录的状态保存到一个堆栈中,以便稍后恢复。该命令会将所有已添加到暂存区的更改以及所有已修改但未添加到暂存区的文件都保存起来。
如果一个文件没有添加到暂存区,则 Git 不会跟踪该文件的更改。 因此,git stash 命令不会将未添加到暂存区的文件保存起来。
要将未添加到暂存区的文件暂存起来,您需要先将它们添加到暂存区。 您可以使用 git add 命令将单个文件添加到暂存区,也可以使用 git add . 命令将所有已修改的文件添加到暂存区。
以下是一些将未添加到暂存区的文件暂存起来的方法:
使用 git add 命令将单个文件添加到暂存区:
git add
使用 git add . 命令将所有已修改的文件添加到暂存区:
git add .
使用 git stash -u 命令将所有已修改的文件(包括未添加到暂存区的文件)暂存起来:
git stash -u
注意:
git stash -u 命令可能会导致冲突。如果已修改的文件在暂存区和工作目录中具有不同的内容,则 Git 将无法自动解决冲突。您需要手动解决冲突才能恢复暂存的更改。
示例:
假设您有一个名为 README.md 的文件,您已经对其进行了修改,但尚未将其添加到暂存区。要将该文件暂存起来,您可以使用以下命令:

# 将文件添加到暂存区
git add README.md
# 暂存所有已修改的文件
git add .
# 将所有已修改的文件(包括未添加到暂存区的文件)暂存起来
git stash -u

3. 问:可以有多个暂存吗?3. 问:可以有多个暂存吗?

答:是的,Git 可以有多个暂存。每个暂存都代表一个工作目录和暂存区的状态。您可以使用 git stash 命令将当前工作目录和暂存区的状态保存到一个暂存中。
要查看所有暂存,您可以使用 git stash list 命令。 该命令将列出所有暂存及其描述。
要恢复特定的暂存,您可以使用 git stash apply 命令。 该命令将恢复指定暂存中的工作目录和暂存区的状态。
以下是如何选择要恢复的暂存的步骤:
使用 git stash list 命令查看所有暂存。
确定要恢复的暂存。
使用 git stash apply 命令恢复指定的暂存。
示例:
假设您有两个暂存:

# 列出所有暂存
git stash list
# 输出:
# stash@{0}: WIP on feature branch: 1 file changed, 1 insertion(+)
# stash@{1}: WIP on master branch: 2 files changed, 2 insertions(+)

要恢复第一个暂存,您可以使用以下命令:

# 恢复第一个暂存
git stash apply stash@{0}
# 输出:
# Reinstate working directory changes from 'stash@{0}'
# (nothing to commit, working tree clean)

注意:
git stash apply 命令会恢复指定暂存中的工作目录和暂存区的状态。这意味着您将丢失自上次暂存以来对工作目录所做的任何更改。
您可以使用 git stash drop 命令删除暂存。
其他选项:
你可以使用 -m 选项为暂存添加说明。
git stash -m "WIP on feature branch"
你可以使用 -u 选项在恢复暂存时同时更新工作目录的索引文件。
git stash apply -u
通过这些步骤,您应该能够成功地选择并恢复特定的暂存。

4. 问:恢复暂存后,暂存列表中仍然有该暂存是吗?

答:是的,恢复暂存后,暂存列表中仍然有该暂存。
git stash apply 命令只会恢复暂存中的工作目录和暂存区的状态,但不会删除暂存本身。要删除暂存,您需要使用 git stash drop 命令。
以下是恢复暂存后暂存列表中仍然有该暂存的原因:
git stash 命令将当前工作目录和暂存区的状态保存到一个堆栈中。
git stash apply 命令只会从堆栈中弹出并恢复指定的暂存。
堆栈中的其他暂存仍然保留。
以下是如何删除暂存的步骤:
使用 git stash list 命令查看所有暂存。
确定要删除的暂存。
使用 git stash drop 命令删除指定的暂存。
示例:
假设您有两个暂存:

# 列出所有暂存
git stash list
# 输出:
# stash@{0}: WIP on feature branch: 1 file changed, 1 insertion(+)
# stash@{1}: WIP on master branch: 2 files changed, 2 insertions(+)

要删除第一个暂存,您可以使用以下命令:

# 删除第一个暂存
git stash drop stash@{0}
# 输出:
# Dropped stash@{0} (WIP on feature branch)

注意:
git stash drop 命令会永久删除指定的暂存。
删除暂存之前,请确保您不再需要该暂存。
其他选项:
你可以使用 -p 选项查看暂存的详细信息。
git stash list -p stash@{0}
你可以使用 -a 选项删除所有暂存。
git stash drop -a
通过这些步骤,您应该能够成功地删除暂存。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注