我有这样的情况: 关于分支设计决策。
最新提交:
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闭包并从这个独立的头状态创建新的提交而不需要合并等等。
如何让它发挥作用?
答案 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可以检查提交和分支,还可以检出文件。如果从特定提交中检出文件,则需要区分文件和提交,使用 - ,提交之前和之后的文件(在这种情况下。表示当前目录中的所有文件)
但问题的解决方案实际上是使用不同设计的分支