我想隐藏未跟踪的文件,但我继续传递错误的选项.对我来说这听起来是对的:
git stash save [-a|--all]
Run Code Online (Sandbox Code Playgroud)
但实际上这也隐藏了文件.正确的是:
git stash save [-u|--include-untracked]
Run Code Online (Sandbox Code Playgroud)
当我运行git stash save -a并尝试git stash pop它时,我得到所有被忽略文件的无数错误:
path/to/file1.ext already exists, no checkout
path/to/file1.ext already exists, no checkout
path/to/file1.ext already exists, no checkout
...
Could not restore untracked files from stash
Run Code Online (Sandbox Code Playgroud)
所以命令失败了.
如何恢复跟踪和未跟踪的更改?git reflog不存储存储命令.
有没有办法检索最初创建存储的提交?
使用默认命令创建存储时,git stash原始提交保存在存储消息中,因此通常如下所示:
stash@{0}: WIP on master: abc123 This is the message of some commit.
Run Code Online (Sandbox Code Playgroud)
但是,如果git stash save 'a stash message'使用,则提交不会出现在存储列表中:
stash@{1}: On master: my own message
Run Code Online (Sandbox Code Playgroud)
那么如何才能找回呢?
我意识到我的问题与How to list the parent commit of a stash in `git stash list`和Get git stash parent commit非常相似,但那些有太多令人困惑、不同的回答,我在问我自己的问题。
让我们假设如果我跑git stash list,我看到stash@{0}: On featureX: someMessageHere
当我进行存储时,我如何才能显示我正在工作的提交的哈希值(我想这可以被视为父提交)?
我看到了很多不同的答案,我很困惑这些答案是什么,它们有什么不同,以及哪个是我问题的答案:
git show stash@{1}^git log -1 commitish^git log -1 stash@{0}^git log -g --no-walk --parents refs/stashgit for-each-ref --format='%(refname:short)' --points-at $(git rev-parse refs/stash~1) refs/headsgit log -g --format="%gd %H" refs/stash |
while read name hash; do
printf "%s %s " $name $(git rev-parse --short $name^)
git log …Run Code Online (Sandbox Code Playgroud)