有时我使用git reset
。通常是要撤消'一个或多个提交。例如,如果我想从2年前回到我的提交状态,我git reset HEAD~2
。保留暂存区/索引中从HEAD~2
到HEAD
的所有更改。
目前我有相当数量的提交,自从branchA
分支后我添加了~15。现在branchB
我要做的就是将其重置为branchA
,并将所有更改保留为branchA
- >临时区域branchB
。我基本上想以一种新的方式重新添加和提交这些更改。
git reset
似乎将提交作为参数,即git reset HEAD
。因此,如果我执行git reset HEAD^
,那么自一次提交以来我所做的所有更改都将在暂存区域中显示已修改/更改。那么为什么然后赢得git reset branchA
只是让我的分支~15次提交?在这种情况下,分支不能用作提交的替代吗?
答案 0 :(得分:2)
我认为您正在寻找软复位:
git reset --soft branchA # or
git reset --soft <SHA-1>
其中<SHA-1>
是branchA
的HEAD提交的哈希值。
此软复位会将branchB
的HEAD指针移回同一分支中的branchA
的HEAD提交。但是,它不会触及branchB
的阶段或工作目录。换句话说,branchA
和branchB
之间的差异变化将在阶段中,您可以根据需要再次提交它们。
请注意,这是压缩一系列提交的一种方法。实现你想要的东西的另一种方法是交互式rebase,然而这将是更多的工作。
<强>更新强>
错误fatal: ambiguous argument 'branchA': both revision and filename
表示除了名为branchA
的分支外,还有名为branchA
的文件夹或文件。要告诉Git使用分支而不是文件/文件夹,请使用以下命令:
git reset --soft branchA --