Jos*_*Lee 98
"当前不在任何分支上"意味着您有一个分离的 头,即您的HEAD指针直接引用提交而不是象征性地指向分支的名称.
您可以通过检查SHA1的提交,或者当您处于rebase中间或合并失败时进入这种情况.很难说你为偶然进入这种情况所做的工作.
据说,当您从分离的HEAD切换到某个分支时,您可能会丢失更改,但reflog将始终跟踪HEAD移动的位置.实际上,当从一个独立的HEAD切换时,Git 1.7.5会警告你.您可以真正失去工作的唯一时间是您有未提交的更改,您可能想要提交或存储.
一个简单的方法,看看发生了什么事是git reflog
或git log -g --decorate
一个更详细列表.该--decorate
选项将为每个SHA1标记指向它的所有分支的名称.如果当前HEAD的SHA1与master完全相同,那么除了git checkout master
重新回到轨道之外,您不必做任何事情.否则,查看某个其他分支是否指向SHA1.如果没有,您可能希望创建一个分支以挂起它.
另一个好的命令是git branch -av
,它将类似地列出所有分支及它们指向的内容,这样你就可以看到你(no branch)
应该是什么.
Chr*_*sen 32
没有更多细节,很难说清楚.
git pull
从远程存储库中获取更改,然后进行合并.它可以配置为执行rebase而不是合并(通过执行git pull --rebase
,或通过branch.<branch_name>.rebase
为您要提取的分支配置true值).
如果你开始分支,任何合并类型拉动将始终离开你在该分支上.另一方面,rebase命令总是通过使用临时分离的HEAD(也称为"无分支")来工作.如果你在rebase-type pull期间处于这种状态,那么是因为pull的rebase部分遇到了冲突,它正等着你解决它们并使用rebase --continue
(或--skip
,或--abort
).
默认情况下,reflog存储对HEAD进行的每次更新(每个分支也可以有一个).您可以使用git reflog show
(或git log -g
查看更详细的视图)查看reflog .它可能会帮助您确定您是如何进入这种状态的.
如果你正处于一个rebase(你有一个.git/rebase-apply
目录)的中间,那么它可能会停止让你解决一些冲突.使用git status
检查"未合并"的条目.任何此类条目都应在文件中嵌入冲突标记(假设它们是纯文本文件).您应该编辑它们以解决冲突,并通过运行它们将它们标记为合并git add
.然后git rebase --continue
继续运行rebase.您可能会遇到更多应以类似方式处理的冲突(编辑,添加,继续).如果您决定不再需要特定提交,则可以跳过它git rebase --skip
.你可以放弃整个rebase git rebase --abort
.当rebase由于任何冲突而停止时,所有这些rebase命令都会在错误消息中列出.一旦应用(或跳过)所有挂起的提交,您的原始分支将使用最终的新提交进行更新,并且您的HEAD将重新连接到它(如果您中止,您的HEAD将被重新连接而不更新分支).
如果您的分离HEAD不是由于在rebase中间发生冲突,那么您的HEAD在拉动之前的某个时刻被分离.您需要评估树的当前状态以确定您要执行的操作.您可以使用git show-branch --current --all
或者git log --graph --oneline --decorate --all
使用图形工具gitk
来了解当前(分离的)HEAD与其他分支的关系.如果您决定要保留HEAD的内容,那么您可以为它们创建一个新的分支git branch new_branch_name
.如果要覆盖现有分支,请使用git branch --force existing_branch_name
.然后使用git checkout branch_name
将存储库的HEAD重新附加到分支.
归档时间: |
|
查看次数: |
62382 次 |
最近记录: |