- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 git 目录有这种情况:
ProgSoul@PROGSOUL-LENOVO:~/esercizio3_2$ git status
Sul branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: A
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: A
Untracked files:
(use "git add <file>..." to include in what will be committed)
B
在这种情况下我有:
我的老师要我暂时停止工作,创建一个BUGFIX文件,提交并恢复我以前的情况。
我是通过这些命令实现的:
git stash --include-untracked
touch BUGFIX
git add BUGFIX
git commit -m "Aggiunto file BUGFIX"
git stash pop --index
使用这些命令,我保存了我的初始情况,并在提交修复后恢复了它。我的老师也要求我在不使用 git-stash 的情况下达到这个目标。
我遵循了存储文档中的帮助:
git checkout -b WIP
git commit -a -m "WIP"
git checkout master
touch BUGFIX
git add BUGFIX
git commit -a -m "BUGFIX"
git checkout WIP
git reset --soft HEAD^
使用 git reset --soft 我恢复了索引,但未暂存提交的更改已丢失。
使用 git reset --mixed 我恢复了未暂存提交但索引已丢失的更改。
在不使用 git stash 的情况下提交修复后,如何恢复相同的初始状态?
最佳答案
让我们这样试试:
问:如何在 Git 中保存一些东西?
答:提交。
问:git stash
怎么样,它似乎可以保存东西,它是如何管理的?
答:它 promise 。
问:但是它没有在我的分支上提交任何内容。1
答:他们在特殊的“stash ”处,不是分支机构。但它们仍然是提交。
1从技术上讲,这不是问题。 :-)
这可以说是 Git 的底线:提交可以保存东西。否则,您所拥有的只是工作树中的内容,以及索引(暂存区)中的内容。当您运行 git commit
时,暂存区的东西会永久存在。工作树的内容从不是永久的:您必须将其复制到暂存区然后提交。
这就是 git stash
所做的。它实际上进行了两次 提交,一次针对当前索引,一次针对工作树。2 它只是在分支以外的其他地方进行提交,使用名称stash
以找到它们。
不过,没有什么能阻止您做出自己的 promise 。进行两次或多次提交然后必须撤消它们只是有点痛苦,这就是 git stash
存在的原因。
2当您像以前那样使用 --include-untracked
时,它实际上进行了三次 提交:一次用于索引,一次用于索引用于工作树,第三个用于未跟踪文件。第三次提交非常棘手,无论是制作还是恢复。 stash 脚本使用临时索引而不是尝试在主索引中完成工作。
一般来说,每个 Git 存储库都独立于所有其他 Git 存储库,但可以与任何相关的 Git 存储库对等。因此,您可以将一个存储库克隆到另一个存储库,从而获得另一个可以工作的工作树。该工作树还带有自己的(单独的)索引/暂存区。
如果您在本地进行克隆,在您的本地文件系统上,Git 通常能够避免大量的存储库文件复制。因此,虽然这看起来很昂贵,但通常还不错。主要问题是您现在有两个存储库要记住提交,并且您必须在它们和/或您最初从中克隆的任何上游之间获取和/或推送。
git worktree add
(仅限 2.5 和更新版本)在 Git 2.5 之前,有一个“贡献的”脚本来制作备用工作树。从 2.5 开始,它得到了官方支持,尽管从那时起修复了一些重要的错误(即使现在它也有一些粗糙的边缘)。您现在可以运行 git worktree add
来创建将使用不同 分支但共享底层存储库的新工作树。
共享一个底层存储库的两个工作树不得使用相同的分支。 (这是因为 Git 存储“当前分支”和“当前提交”的想法的方式,以及当您进行新提交时 Git 推进当前分支的方式。)如果您的目标是,然而,是在一些其他分支而不是您现在正在处理的分支中进行修复,这正是您所需要的。
关于git - 如何在不使用 git-stash 的情况下保存正在进行的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41226396/
我是一名优秀的程序员,十分优秀!