如何从当前状态恢复为在某个提交时创建的快照?
如果我这样做git log
,那么我得到以下输出:
$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <me@me.com>
Date: Thu Nov 4 18:59:41 2010 -0400
blah blah blah...
commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date: Thu Nov 4 05:13:39 2010 -0400
more blah blah blah...
commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date: Thu Nov 4 00:55:06 2010 -0400
And yet more blah blah...
commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date: Wed Nov 3 23:56:08 2010 -0400
Yep, more blah blah.
Run Code Online (Sandbox Code Playgroud)
如何从11月3日恢复提交,即提交0d1d7fc
?
我使用GitHub作为我的远程存储库.
我已经将5次提交推送到服务器,并希望在这些提交之前恢复到状态.
如果提交哈希是3425661dba2aadccdbab
,如何将整个本地/远程恢复为该提交?我试过了
$ reset --hard 3425661dba2aadccdbab
Run Code Online (Sandbox Code Playgroud)
但那只是把我的工作头重新安置到那个分支,并要求我再做git pull
一次.我试过结帐,但这导致我降落在"独立的头"分支.
使用GitHub Windows客户端我进行了同步以将远程更改提取到本地计算机,但在完成同步之前,我的磁盘空间不足,同步失败.现在我似乎有一堆本地更改,实际上是从原点中提取的更改.我试着运行git pull但得到了:
C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git pull
Updating b3a86e1..5afd74f
error: Your local changes to the following files would be overwritten by merge:
SourceLog.Interface/IChangedFile.cs
SourceLog.Interface/ILogEntry.cs
...
Please, commit your changes or stash them before you can merge.
error: The following untracked working tree files would be overwritten by merge:
Lib/MSBuildExtensionPack/4.0.6.0/Ionic.Zip.dll
Lib/MSBuildExtensionPack/4.0.6.0/MSBuild.ExtensionPack.dll
...
Aborting
Run Code Online (Sandbox Code Playgroud)
所以现在我想丢弃当地的变化,但我得到了:
C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git checkout -- .
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) …
Run Code Online (Sandbox Code Playgroud) 我想跟进另一个关于此问题的问题: 检查旧提交并使其成为新提交
但他们说"不要那样做!" 所以看来我必须问一个新问题.(即使是同样的问题,我认为对我来说最好的答案并没有按预期工作......
如果我有提交
A-B-C-D-E-F
(想象这些都是SHA).我希望将整个存储库完全一样C
,然后提交它以创建'G'
完全相同的存储库C
.因此,当我完成时,日志是ABCDEFG,即使C&G是相同的.
一个答案表明樱桃挑选,这看起来很完美,除了它让我解决了C
和之间的每一次冲突F
.我查看了文档,然后我尝试--force
了,然后推荐--patch
.--patch
是最接近但不是绝对的.那么有没有办法让樱桃挑选只选择C
冲突的版本?
另一个最接近的答案是结帐C
,但我找不到将其保持在同一分支上的神奇单词.在最近的训练我完成说用"神奇短跑冲刺"末告诉git
你想这对当前的分支,但无论我做什么,它会创建一个"(无分支)"分支.
正如我相信你可以告诉我是相当新的Git的(一般和命令行),但我想弄清楚我自己.如果你可以使用你推荐的详细版本,那么它会更好地贴在我的头上,我将不胜感激.(-a
= --all
或-a = --annotate
或-a = --albuquerque?
)
这似乎很简单,你可能想要什么用git做 - 回到先前的承诺,而失去中介承诺的情况下,你改变了主意.
介绍和搜索
所以我认为我犯了一个严重的错误,我很担心。我已经解析了论坛上的超脱头脑,我已经接近找到答案了,但是场景太具体了,不适用于我所处的位置。如果您找到回答我问题的特定线程,请链接我。
例如:如何将分离的 HEAD 与 master/origin 协调?
那家伙已经做了git rebase -i
,而我没有。我试过变基,但它没有解决我的问题。
小背景:
问题:
要使用工作代码访问旧提交,我做了(可能是错误的事情):
git log
git checkout <hash-of-desired-old-commit>
Run Code Online (Sandbox Code Playgroud)
我继续完成代码。感谢上帝的版本控制!但是射击,为什么 git 这么复杂?我如何保存这项工作?我现在处于一个超脱的头脑中。Origin/Master 在未来的一些提交中最好全部删除。
我尝试过的:
git add -A
跟着git commit -m "oh shit, detached head commit"
和git rebase master
git reset --hard HEAD~3
根据此处的建议:检查旧提交并使其成为新提交问题:我如何将我的超然头与原点/大师调和?一旦和解,我是否需要git push --force
或其他什么(特别是--force
旗帜)?这个独立的头有工作,我读到我等待的时间越长,垃圾收集可能会来吃我丢失的分支。抱歉,我确实缺乏任何正式的 git 培训……我几乎准备好检查 origin master 然后重写代码。
先感谢您。
git ×5
github ×3
commit ×1
git-checkout ×1
git-reset ×1
git-revert ×1
repository ×1
revert ×1
windows ×1
windows-7 ×1