Git如何在不破坏当前提交的情况下基于HEAD~1创建新提交

时间:2015-04-20 14:14:04

标签: git

我有这样的情况: 关于分支设计决策。

最新提交:

Design Option 2
Design Option 1

我想结帐提交'设计选项1'并使用它来创建提交'设计选项3'。 我不想丢失或修改提交设计选项1'或者'设计选项2'。

我知道我可以使用以下命令检查提交设计选项1:

git checkout HEAD~1

然后我收到这条消息:"你已经分离了HEAD' 。状态"

这并不是很有用,因为我不明白与分离的HEAD有什么关系。

为什么我不能像平常一样从超脱的头上工作? 为什么要赢得这项工作呢?

// Make changes
git add .
git commit -m "Design Option 3"
git push

我不想创建新的分支,只是告诉git闭包并从这个独立的头状态创建新的提交而不需要合并等等。

如何让它发挥作用?

3 个答案:

答案 0 :(得分:4)

  

为什么我不能像平常一样从超脱的头上工作?为什么要赢得这项工作呢?

因为推送不知道要推送什么(哪个提交,以及远程哪个分支)。
请参阅" Why did my Git repo enter a detached HEAD state?"。

最好创建一个新分支,对其进行处理并推送它。

git checkout -b newBranch HEAD~1
# work
# Make changes
git add .
git commit -m "Design Option 3"
git push -u origin newBranch

答案 1 :(得分:1)

当你尝试对付系统/软件/其他任何东西时,你将会遇到困难。 Git也不例外。分支是你的问题的解决方案,它们很便宜(几百字节?更少?)所以:只需使用它们。

答案 2 :(得分:0)

从像这样的提交中签出文件

git checkout HEAD~1 -- .

从HEAD~1生成命令签出文件并将它们放入索引中。它不会导致头状态脱落。 git checkout可以检查提交和分支,还可以检出文件。如果从特定提交中检出文件,则需要区分文件和提交,使用 - ,提交之前和之后的文件(在这种情况下。表示当前目录中的所有文件)

但问题的解决方案实际上是使用不同设计的分支