好的,所以我已经碰到了几次,这真的很烦人。情形:
modify a file say a.txt (add say two lines)
stash it
stash apply
git reset
remove the two lines added to a.txt because you want to commit and push these partial changes
git add a.txt
git commit the above, and push the changes (push irrelevant for this discussion)
git reset --hard
now do git stash apply
现在,a.txt与提交的版本相同,应该是我存储的版本。因此我现在丢失了对a.txt的更改。如果我回去一次提交,即。 git co head~1并申请我的存储它仍然无效。
非常感谢修复。
感谢。
好的,所以我尝试使用脚本来重现这一点,尝试合并提交的许多变体等,并且无法重现它。不幸的是,在脚本中我很难重现我正在处理的源代码树的复杂性。我现在想到的另外一个是我有多个基于同一分支的不同版本的存储库,一些文件被推送,一些文件在本地提交,这些存储在那些存储器中。我的命令只应用了前面描述的最后一个存储,但在整个过程中,我丢失了2个存储区,它们在执行git存储列表时就消失了。所以我也许这会以某种方式影响结果。如果有人碰到类似的东西请更新这个帖子。如果有人有兴趣进一步测试,我可以发布我的脚本(完全自包含,创建存储库和一切)。与此同时,我将继续使用git,下次它可能会更好地了解发生的事情。
这也发生在工作中,因此我无法提供原始代码,但我会再次查看gitk结果并发布我的发现,因为这可能会有所帮助。
感谢您的帮助!
好的,所以看看gitk显示我的存储是基于索引(我认为是正常的),然后该索引基于提交,似乎只存在于存储中(这没有意义即,当我将它提交给我的私有分支时,保存具有我提供的提交消息,但不知何故,我的私有分支没有将该提交作为gitk路径的一部分。
答案 0 :(得分:1)
好的,我只是按照你的指示顺序,我得到的是:
$ # Update a.txt
$ git stash
$ git stash apply
$ git reset
$ git add a.txt
$ git commit -m "Updated a.txt"
git stash apply
会重新应用您刚刚保存在存储中的a.txt
所做的更改。
git reset
清除索引,但单独保留工作目录。
git add
和git commit
将更改保存到您要隐藏以供日后使用的a.txt
。
但是,除了可能误解你在做什么之外,看起来你可能会从git add --patch
中受益。这允许您向文件添加单个更改,而不添加该文件中的所有更改。