我经常使用git stash并git stash pop保存和恢复工作树中的更改.昨天我的工作树上有一些变化,我已经藏起来了,然后我对工作树做了更多改动.我想回去查看昨天发生的变化,但git stash pop似乎删除了对相关提交的所有引用.
我知道如果我使用git stash那么.git/refs/stash包含用于创建存储的提交的引用.而.git/logs/refs/stash包含整个存储.但那些参考文献已经消失了git stash pop.我知道提交仍然在我的存储库中,但我不知道它是什么.
有没有一种简单的方法来恢复昨天的隐藏提交引用?
请注意,这对我来说并不重要,因为我有每日备份,可以回到昨天的工作树来获取我的更改.我问,因为必须有一个更简单的方法!
我想在Git中重命名/移动项目子树
/project/xyz
Run Code Online (Sandbox Code Playgroud)
至
/components/xyz
Run Code Online (Sandbox Code Playgroud)
如果我使用普通的git mv project components,那么所有的提交历史xyz project都会丢失.有没有办法移动这个以保持历史?
我假设两者都以同样的方式工作.两者都将每个文件添加到索引.但我似乎错了.
git add .和之间有什么区别git add -u?作为一个Git新手,我意识到我一直在使用它,好像它是Subversion.例如,总是在master上工作,而不是在拉动更改之前在本地提交.这通常会导致可避免的手动合并情况.使用Git的其他常见反模式有哪些?
git newbies似乎是一个常见的问题.
我忘了.gitignore一个特定的文件,并在提交之后将它添加到.gitignore没有任何区别.
我在gitready上找到了这个页面,它解释了如何从存储库中删除文件而不将其从工作树中删除(通过使用命令git rm --cached <file>,该工作正常,但如果我然后尝试将其合并回另一个分支,则文件在工作树被删除.
在空文件夹上重现的步骤:
git init
touch want.txt
touch wantnot.txt
git add .
git commit -m "Initial"
git checkout -b BranchForIgnore
git rm --cached wantnot.txt
cat > .gitignore
wantnot.txt [Ctrl-D Ctrl-D here to exit cat]
git add .
git commit -m "Ignoring file"
Run Code Online (Sandbox Code Playgroud)
到此为止,一切都很好
git checkout master
git merge BranchForIgnore
Run Code Online (Sandbox Code Playgroud)
此时,我的wantnot.txt文件不再是我的主人,显然,检查BranchForIgnore也无济于事.
该怎么办?