0

好的,所以我遇到过几次,这真的很烦人。设想:

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 stash list 时消失了。所以我也许这也会以某种方式影响结果。如果有人遇到类似情况,请更新此线程。如果有人有兴趣进一步测试我,我可以发布我的脚本(完全独立,创建存储库和一切)。与此同时,我将继续使用 git,下次发生这种情况时,我可能会更好地了解发生了什么。

这也发生在工作中,因此我无法提供原始代码,但我会再次查看 gitk 结果并发布我的发现,因为这可能会有所帮助。

感谢所有的帮助!

好的,所以查看 gitk 表明我的存储基于一个索引(我认为这是正常的),然后该索引基于一个提交,这似乎只存在于存储中(这没有意义。即。当我将它提交到我的私人分支时,保存有我给它的提交消息,但不知何故,我的私人分支没有将该提交作为 gitk 路径的一部分。

4

1 回答 1

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. 这允许您将单个更改添加到文件中,而无需添加该文件中的所有更改。

于 2010-10-18T20:15:03.427 回答