这就是发生的事情:
我有一个分支A.在分支AI上提交了一系列更改.我对代码不满意,所以我检查了分支A中的先前提交.然后我做了一些更改并在分支A上提交它们.现在我无法在任何地方找到此提交.我丢失了这段代码吗?
Die*_*Epp 171
旧提交仍在reflog中.
git reflog
Run Code Online (Sandbox Code Playgroud)
这将显示提交列表,并且"丢失"提交应该在那里.你可以把它变成一个新的分支.例如,如果SHA-1是ba5a739,那么您可以在旧提交中创建一个名为"new-branch"的新分支:
git branch new-branch ba5a739
Run Code Online (Sandbox Code Playgroud)
请注意,修剪数据库时将删除"丢失"提交.
tan*_*ius 51
正如已经指出的那样,你的提交仍然可以在reflog中找到.除了其他的答案,这里是一个办法接管分离的头提交到当前分支直接,而无需创建和合并一个新的分支:
查找在分离的HEAD状态下提交的提交的SHA-1哈希值
git reflog
Run Code Online (Sandbox Code Playgroud)然后执行,所有提交的哈希值从最旧到最近排序:
git cherry-pick <hash1> <hash2> <hash3> ...
Run Code Online (Sandbox Code Playgroud)
例如,如果我只有一个,以"前7个字符"短哈希格式给出:
git cherry-pick a21d053
Run Code Online (Sandbox Code Playgroud)这将为您当前的分支创建新的提交,您在命令中提到的每个分离的HEAD提交哈希提交一次.它还接管原始提交消息.
ser*_*gtk 10
您可以使用以下命令找到丢失(悬空)提交:
git fsck --lost-found
Run Code Online (Sandbox Code Playgroud)
请注意,如果您当前的头部是悬空提交,则不会将其列为丢失.
您可以在git-fsck(1)手册页上找到更多信息
然后你可以在丢失的提交上创建分支:
git branch new-branch ba5a739
Run Code Online (Sandbox Code Playgroud)
用于工作目录状态的Git用语是" 分离的HEAD".这是另一个git reflog进行保存的地方.
$ git reflog
0b40dd6 HEAD@{0}: commit: my commit on detached HEAD
...
Run Code Online (Sandbox Code Playgroud)
如果我尝试签出一个不同的分支,git-1.7.5.1给出了一个有用的建议.
$ git checkout master Warning: you are leaving 1 commit behind, not connected to any of your branches: 0b40dd6 my commit on detached HEAD If you want to keep them by creating a new branch, this may be a good time to do so with: git branch new_branch_name 0b40dd65c06bb215327863c2ca10fdb4f904215b Switched to branch 'master'
小智 6
按照以下步骤将分离的头部链接回 git repo
git checkout "your branch with path but without remote name"例如,如果远程名称是原点,bugfix/somebranch然后使用分支名称git checkout bugfix/somebranch
git reflog
从分离分支的提交列表中获取提交 SHA 的列表。
git cherry-pick "commit hash1" "commit hash2" "commit hash3"
git push
搞定!!
你没有丢失它,Git仍然保留一份副本(但目前任何分支机构都无法访问).您可以使用该git reflog命令找到丢失的提交.reflog会跟踪分支头的历史位置,您可以使用它来查找分支头先前指向的内容.
| 归档时间: |
|
| 查看次数: |
37123 次 |
| 最近记录: |