在使用Git时,我需要回到一个特定的提交。我进行了一些更改,现在想要提交它们。有什么正确的方法吗?
我的项目现在处于分离头状态。如果我提交更改,它们会被保存吗?
git commit
? 否则,我应该怎么做才能不丢失我的更改?
在使用Git时,我需要回到一个特定的提交。我进行了一些更改,现在想要提交它们。有什么正确的方法吗?
我的项目现在处于分离头状态。如果我提交更改,它们会被保存吗?
git commit
? 否则,我应该怎么做才能不丢失我的更改?
免责声明:Git并不复杂,只是功能强大。请不要因为我写了一个很长的答案而感到害怕 :)
您拥有:
master: a-b-c-d-e-f
并且想要更改c
。您执行了以下操作:
* git checkout c
(避免在将来检出提交记录。转而移动分支头)
* 更改了一些文件
您现在所在位置如下:
master: a-b-c-d-e-f \未提交的工作,已分离
(如果您已经推送,下游的人将需要从上游的变基中恢复)
git stash .
git checkout master
git stash pop
(解决冲突)git stage .
git commit -m "g的临时名称"
master: a-b-c-d-e-f-g
)git rebase c -i
("将我的当前分支重新应用到点c上,让我交互地操作提交记录",即使 d-e-f
重新父节点(变基)到一个新的c
)g
,使其在c
之后,然后将变基命令从pick
改为fixup
。使用dd
删除一行,使用P
放置它,在输入模式下输入“fixup”,然后:wq
保存并退出vim。master: a-b-c'-d'-e'-f'
,其中c'
是你在变基过程中合并g
和c
的结果。d-e-f
已经变成了d'-e'-f'
,因为它们的祖先已经改变,所以就git而言,它们不是“相同”的提交,但它们的内容保持不变)d-e-f
(并重写历史记录,使其好像从未存在)(如果您已经推送了,下游的人将需要从上游的变基中恢复):
git stash .
git checkout master
master: a-b-c-d-e-f
,stashed文件最初基于c)git reset --hard c
(放弃从c开始的主分支上的所有文件和提交)master: a-b-c
,带有stashed文件)git stash pop
(解决冲突)master: a-b-c-*
)git stage .
git commit -m "g的描述"
主分支: a-b-c-g
)git stash
git revert --no-commit d
git revert --no-commit e
git revert --no-commit f
git push
git stash pop
(将没有冲突)git stage .
git commit -m“为了修复...撤销d-e-f”
git push
git push
了d-e-f,并且你想将它们保持分开:听起来你的新更改是基于主分支的一个新分支。 git branch <foo>
。
从这个提交中创建一个新分支,然后进行 commit
:
git checkout -b <branchname>
git commit
git add myfile1 myfile2
)。如何在分离的 HEAD 中保存您的工作:
git checkout -b <new-branch-name-for-detached-head> <sha-of-the-detached-head>
如果你想将它合并到主分支:
git checkout master
git merge <new-branch-name-you-have-just-created>
如果您因为检出标签(git checkout tags/<tag-name>
)而处于“分离的 HEAD”状态,则可以使用 -c 开关命令创建一个新分支来保留您创建的提交。
git switch -c <new-branch-name>
git rebase <commit to edit> -i
,然后按照交互式变基指南操作。指南链接:https://help.github.com/articles/about-git-rebase/ - RJFalconer