我想做以下工作流程:
有没有办法做第2步?
例
echo "123" > foo
git add foo # Assumes this is a git directory
echo "456" >> foo
git stash
cat foo # Should yield 123
Run Code Online (Sandbox Code Playgroud)
vha*_*lac 259
git stash save有一个选项--keep-index,完全符合您的需要.
所以,跑git stash save --keep-index.
pd9*_*d93 51
从 Git 2.35+(2022 年第 1 季度)开始,您现在可以使用--staged标志 ( man ) on仅存储索引中的git stash push更改。
由于您的问题提出了完全相反的问题,我们有 2 个选择:
git stash push --staged # Stash staged changes
git stash # Stash everything else
git stash pop stash@{1} # Restore staged changes stash
Run Code Online (Sandbox Code Playgroud)
git stash push --staged
Run Code Online (Sandbox Code Playgroud)
我从另一个 S/O 帖子的答案中得到了这个信息。
ale*_*zik 32
这可以通过3个步骤完成:保存分阶段更改,存储其他所有内容,使用分阶段更改恢复索引.基本上是:
git commit -m 'Save index'
git stash push -u -m 'Unstaged changes and untracked files'
git reset --soft HEAD^
Run Code Online (Sandbox Code Playgroud)
这将完全符合您的要求.
seh*_*ehe 26
git stash save --keep-index
Run Code Online (Sandbox Code Playgroud)
另外,Re:
为什么不在升级后提交更改? - 申
答:因为你应该经常签入经过测试的代码:)这意味着,你需要只用你要提交的更改来运行测试
所有这一切除了当然,作为一名经验丰富的程序员,你有天生的冲动来测试和审查这些变化 - 只是部分开玩笑
Ram*_*man 16
在 Git 中仅存储工作树(未暂存的更改)比应有的要困难得多。接受的答案隐藏了未分阶段的更改,但也隐藏了分阶段的更改(并使它们也分阶段),这很少是您想要的。
这个别名效果很好:
stash-working = "!f() { \
git commit --quiet --no-verify -m \"temp for stash-working\" && \
git stash push \"$@\" && \
git reset --quiet --soft HEAD~1; }; f"
Run Code Online (Sandbox Code Playgroud)
它临时提交暂存的更改,从剩余的更改中创建一个存储(并允许额外的参数,例如--include-untracked和--message作为别名参数传递),然后重置临时提交以取回暂存的更改。
它类似于@Simon Knapp 的回答,但有一些细微的差别——它用于--quiet采取的临时操作,并且它接受任意数量的 stash 参数push,而不是硬编码-m,它确实添加--soft到最终重置以便索引保持它开始时的状态。它还用于--no-verify提交以避免从预提交挂钩(HT:@Granfalloner)更改工作副本。
对于仅存储分阶段更改(别名stash-index)的相反问题,请参阅此答案。
Eug*_*kov 11
有了git version 2.7.4你可以这样做:
git stash save --patch
Run Code Online (Sandbox Code Playgroud)
该git会要求你添加或不更改为藏匿.
然后你只需回答y或n
您可以像往常一样恢复工作目录:
git stash pop
Run Code Online (Sandbox Code Playgroud)
或者,如果您想保存已保存的存储更改:
git stash apply
Run Code Online (Sandbox Code Playgroud)
要将未标记(未添加到提交)的文件添加到 stash,请运行以下命令:
git stash -k
Run Code Online (Sandbox Code Playgroud)
如果您想将新添加的文件(未暂存 - 不是绿色)也包含到存储中,请执行以下操作:
git stash -k -u
Run Code Online (Sandbox Code Playgroud)
然后您可以提交暂存文件。之后,您可以使用以下命令取回最后保存的文件:
git stash pop
Run Code Online (Sandbox Code Playgroud)
Git 没有只存储未暂存更改的命令。
然而,Git 确实允许您指定要存储哪些文件。
git stash push --message 'Unstaged changes' -- app/controllers/products_controller.rb test/controllers/products_controller_test.rb
Run Code Online (Sandbox Code Playgroud)
如果您只想在这些文件中存储特定更改,请添加该--patch选项。
git stash push --patch --message 'Unstaged changes' -- app/controllers/products_controller.rb test/controllers/products_controller_test.rb
Run Code Online (Sandbox Code Playgroud)
该--include-untracked选项允许您隐藏未跟踪的文件。
git stash push --include-untracked --message 'Untracked files' -- app/controllers/widgets_controller.rb test/controllers/widgets_controller_test.rb
Run Code Online (Sandbox Code Playgroud)
运行git help stash(或man git-stash)以获取更多信息。
注意:如果您的未暂存更改相当杂乱,@alesguzik 的答案可能更容易。
扩展之前的答案,我有时会进行一系列复杂的更改,但希望首先进行单独的更改.例如,我可能已经发现了一个错误或其他错误的代码,我想在我的分阶段更改之前修复.一条可能的路线是:
首先存放一切,但保持分阶段的变化完好无损
$ git stash save --keep-index [--include-untracked]
现在也分别存储分阶段的更改
$ git stash save
为修复做出改变; 和测试; 提交他们:
$ git add [--interactive] [--patch]
$ git commit -m"fix ..."
现在恢复以前上演的更改:
$ git stash pop
解决任何冲突,并注意如果有冲突,git将应用但不删除顶部存储条目.
(...然后提交暂存的更改,并恢复所有其他更改的存储,并继续...)
| 归档时间: |
|
| 查看次数: |
41483 次 |
| 最近记录: |