ben*_*zen 249 git git-checkout
使用git我做了这样的事情
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
Run Code Online (Sandbox Code Playgroud)
因为它告诉我,当我处于一个独立的头状态时,我仍然可以犯下这样做.但现在我想要合并我的分离头分支和我的本地主分支,然后将我的一堆更改推送到origin/master.
所以我的问题是如何将主分支与我的实际状态合并(分离头)
Rya*_*art 435
创建一个分支,然后切换到master并合并它:
git branch my-temporary-work
git checkout master
git merge my-temporary-work
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 84
你可以这样做.
# Create temporary branch for your detached head
git branch tmp
# Go to master
git checkout master
# Merge in commits from previously detached head
git merge tmp
# Delete temporary branch
git branch -d tmp
Run Code Online (Sandbox Code Playgroud)
更简单的是
git checkout master
git merge HEAD@{1}
Run Code Online (Sandbox Code Playgroud)
但这有一个轻微的危险,如果你犯了一个错误,恢复在分离头上的提交可能会有点困难.
Arn*_*anc 17
你可以做git merge <commit-number>
或git cherry-pick <commit> <commit> ...
根据Ryan Stewart的建议,您也可以从当前的HEAD创建一个分支:
git branch brand-name
Run Code Online (Sandbox Code Playgroud)
或者只是一个标签:
git tag tag-name
Run Code Online (Sandbox Code Playgroud)
par*_*ver 13
我看到每个人几乎每个人都提出了创建临时分支的解决方案。现在,我们需要承认,每当出现这种“在分离状态下提交”问题时,通常会在一次提交后检测到。并为那个微不足道的提交创建一个完整的分支 - 听起来太多了,对吧?尤其是在您已经在太多分支之间跳转的项目中。
那有什么简单的方法呢?使用提交哈希!
我怎样才能得到它?
git log
. 你会看到这样的东西:commit 10bf8fe4d17bb7de59586a7abb6db321f0786bb3 (HEAD)
Author: Someone <someone@something.com>
Date: So/me/day SO:ME:TI:ME
A commit message that doesn't mean much
commit a3cd1cedf1962916cdc2945f2bd2b271ec8b919d (origin/master, master)
Author: Someone <someone@something.com>
Date: Some/other/day SOME:OTHER:TIME
Another commit message that doesn't mean much
commit 1bfabbe09c70419070fe29ff1ed276c0207bbe10
Author: Someone <someone@something.com>
Date: Thu Jul 8 08:38:12 2021 +0530
Enough reading the example, focus on the answer!!
Run Code Online (Sandbox Code Playgroud)
现在,虽然它看起来像一个正常的情况,但是当你这样做时git push
它会说“一切都是最新的”。
细心的人会发现它不是“最新的”。HEAD
是在主人以外的地方。
10bf8fe4d1
。首先,做一个git checkout master
. 这会将您转移到master
分支。现在你已经复制了哈希值。你可以做一个git merge <hash>
. git log
现在做一个瞧:
commit 10bf8fe4d17bb7de59586a7abb6db321f0786bb3 (HEAD -> master)
Author: Someone <someone@something.com>
Date: S/om/eday SO:ME:TI:ME
A commit message that doesn't mean much
commit a3cd1cedf1962916cdc2945f2bd2b271ec8b919d (origin/master)
Author: Someone <someone@something.com>
Date: Some/other/day SOME:OTHER:TIME
Another commit message that doesn't mean much
commit 1bfabbe09c70419070fe29ff1ed276c0207bbe10
Author: Someone <someone@something.com>
Date: Thu Jul 8 08:38:12 2021 +0530
Enough reading the example, focus on the answer!!
Run Code Online (Sandbox Code Playgroud)
现在,它HEAD
似乎处于正确的位置。
有人可能会问,“如果我没有哈希怎么办?我对悬空提交一无所知,只是做了一个git checkout master
.” 别担心,我已经为你做好了准备。您可以在两个地方找到提交哈希:
git checkout master
,git
已经这样警告你了Warning: you are leaving 1 commit behind, not connected to
any of your branches:
10bf8fe A commit message that doesn't mean much
If you want to keep it by creating a new branch, this may be a good time
to do so with:
git branch <new-branch-name> 10bf8fe
Switched to branch 'master'
Run Code Online (Sandbox Code Playgroud)
你可以看到你的宝藏(hash
),对吗?
git reflog
。它会向您显示类似这样的内容:a3cd1ce (HEAD -> master, origin/master) HEAD@{0}: checkout: moving from 10bf8fe4d17bb7de59586a7abb6db321f0786bb3 to master
10bf8fe HEAD@{1}: commit: A commit message that doesn't mean much
Run Code Online (Sandbox Code Playgroud)
你看到了你正在寻找的宝藏……哈希。
我想这涵盖了在带有悬空提交的分离状态下可能发生的所有可能情况。下次小心!!
Bhu*_*han 12
这就是我做的:
基本上,把它想象detached HEAD
成一个没有名字的新分支.您可以像任何其他分支一样提交到此分支.完成提交后,您需要将其推送到遥控器.
所以你需要做的第一件事是给它detached HEAD
一个名字.你可以轻松地做到这一点detached HEAD
:
git checkout -b some-new-name
Run Code Online (Sandbox Code Playgroud)
现在你可以像任何其他分支一样将它推送到远程.
在我的情况下,我也希望快速转发这个分支以及我在detached HEAD
(现在some-new-branch
)提交的提交.我所做的只是
git checkout master
Run Code Online (Sandbox Code Playgroud)
git pull # To make sure my local copy of master is up to date
git checkout some-new-branch
Run Code Online (Sandbox Code Playgroud)
git merge master // This added current state of master to my changes
当然,我后来合并了master
.
就是这样.
Nat*_*son 12
或者,您可以将 commit-id 挑选到您的分支上。
<commit-id> made in detached head state
git checkout master
git cherry-pick <commit-id>
没有临时分支,没有合并。
在分离的HEAD的情况下,提交工作正常,除了没有命名分支更新.要使用已提交的更改更新主分支,请在您所在的位置创建临时分支(这样临时分支将具有您在分离的HEAD中所做的所有已提交的更改),然后切换到主分支并将临时分支与大师.
git branch temp
git checkout master
git merge temp
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您处于这种情况(提交被分离),我将给出适当的步骤,直到推送。分离的意思是当您的提交不与任何分支关联时,它仅与“分离头”状态关联。
首先你必须创建一个新分支,分离的提交将自动与新分支关联
git branch temporaryWork
Run Code Online (Sandbox Code Playgroud)
然后去结帐掌握,这样你就可以合并那个“临时工作”。请考虑检查分支名称列表,以避免出现一些错误
git checkout master
git merge temporaryWork
Run Code Online (Sandbox Code Playgroud)
而git会说你的文件可能有冲突,回去查看你的代码文本编辑器,删除你不需要的代码。
并提交该更改
git add .
git commit -am "merging temporaryWork"
Run Code Online (Sandbox Code Playgroud)
然后删除“临时工作”
get branch -d temporaryWork
Run Code Online (Sandbox Code Playgroud)
并将其推送到github。
git push origin master
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
147859 次 |
最近记录: |