was*_*abi 13 git git-stash git-log
当我git lg
在本地开发分支上运行时,最新的提交如下所示:
* 7d21213 - (1 hours ago) update business rules - developer1 (HEAD, origin/develop, origin/HEAD, develop)
Run Code Online (Sandbox Code Playgroud)
但是,如果我通过运行git stash
然后运行来存储本地更改git lg
,我会得到以下内容:
* at12334 - (13 seconds ago) WIP on develop: 7d21213 update business rules - developer1 (refs/stash)
|\
| * ef9a11b - (14 seconds ago) index on develop: 7d21213 update business rules - developer1
|/
* 7d21213 - (1 hours ago) update business rules - developer1 (HEAD, origin/develop, origin/HEAD, develop)
Run Code Online (Sandbox Code Playgroud)
这是什么意思?看来,两个新的提交(标记index
和WIP
)的积攒后创建.是这样的,如果是这样,这些提交背后的逻辑是什么?
git lg
Run Code Online (Sandbox Code Playgroud)
是已在测试环境中定义的别名
git log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)' --all
Run Code Online (Sandbox Code Playgroud)
jub*_*0bs 11
git lg
?什么git lg
?请注意,这lg
不是本机Git动词.确实,许多人使用lg
通常对应的别名
git log --all --oneline --graph --decorate
Run Code Online (Sandbox Code Playgroud)
这个定义似乎就是你正在使用的定义.但是,别名是本地的; 什么git lg
意思在你的配置可能是意味着什么Bob和Alice的CONFIGS不同.
因此,您应该始终在问题中包含相关别名的定义,因此我们(Stack Overflow用户)可以与您在同一页面上,并确切知道运行时会发生什么
git <alias>
Run Code Online (Sandbox Code Playgroud)
(git lg
,这里).
存储表示为提交,其树记录工作目录的状态,其第一个父节点是创建存储时HEAD的提交.第二个父树的树在存储时记录索引的状态,并且它成为HEAD提交的子节点.祖先图如下所示:
Run Code Online (Sandbox Code Playgroud).----W / / -----H----I
commit 在哪里,是一个记录索引状态
H
的HEAD
提交,I
是一个记录W
工作树状态的提交.
在你的情况下,
ef9a11b
对应于索引状态的对象(I
在上图中),at12334
对应于工作目录状态的对象(W
在上图中).这两个对象(W
和I
)通常不会在输出中列出git log
,但是如果使用该--all
标志则会出现.
nob*_*bar 11
"WIP"是Work-In-Progress的首字母缩写.这意味着即使您不在自然停留点,也会暂时保存您当前的工作状态.
Stashing使用熟悉的提交/合并机制将您的工作保存在存储库中.特别是,可以通过运行查看上下文中所有当前存储的项目gitk --reflog
,尽管只会标记最新的存储stash
.常规提交和存储之间的一个重要区别是,当删除被删除的页面时(例如通过git stash clear
),它们在reflog中不再可见,因此更难以恢复.
存储通常分为两部分:
如果add
自上次提交后尚未执行任何操作,则索引提交将为空.但是,即使索引为空,它仍然会被提交. 例如,如果你想从藏匿处采摘樱桃以避免与之相关的某些复杂情况,那么随后的隐式合并会使事情复杂化git stash pop
.
Git的存储机制很聪明,功能强大且有用,但它也很复杂,容易出错并且很危险.我最近的做法是避免使用git stash
支持类似的结果,例如git commit -a -m "stash"
保存我的工作和git reset HEAD~1
(在检查"存储"提交后)恢复它.
这留下了最有用的应用程序,git stash
如果您知道不再需要它们,那么只需快速删除所有本地更改.
顺便说一句,您可以通过运行从日志中删除"WIP"和"索引"提交git stash clear
- 但如果您只在存储中保存了有价值的工作,则不要这样做.
归档时间: |
|
查看次数: |
4270 次 |
最近记录: |