2017-09-18 67 views
1

我偶尔使用git reset。通常是“撤消”一个或多个提交。例如,如果我想从2前面回到我的提交状态,我需要git reset HEAD~2。将暂存区域/索引中的所有更改从HEAD~2改为HEAD无法将git重置为分支?

目前我有相当数量的提交,我已经添加了~15,因为分支从branchA。现在在branchB我想要做的是将其重置为branchA,并将剩下的所有更改从branchA - >branchB保留在暂存区域中。我基本上想要以新的方式重新添加和提交这些更改。

git reset似乎将提交作为参数,即git reset HEAD。因此,如果我做git reset HEAD^,那么自从一次提交之前所做的所有更改都将显示在暂存区域中进行修改/更改。那么为什么不会git reset branchA只是将我的分支退回〜15个提交?在这种情况下,分支不能用作提交的替代品吗?

回答

2

我认为你正在寻找一个软复位:

git reset --soft branchA  # or 
git reset --soft <SHA-1> 

其中<SHA-1>是头部的哈希提交的branchA

该软复位会将branchB的HEAD指针移回同一分支中的HEAD提交branchA。但是,它不会触及branchB的舞台或工作目录。换句话说,差异在branchAbranchB之间变化将在舞台上,您可以再次提交它们,只要你想。

请注意,这是压缩一系列提交的一种方法。另一种实现你想要的方式是交互式底座,然而这将是一个更多的工作。

更新:

错误fatal: ambiguous argument 'branchA': both revision and filename意味着你有,除了一个名为branchA分支,又称branchA文件夹或文件。要告诉Git使用分支而不是文件/文件夹,请使用以下命令:

git reset --soft branchA -- 
+0

是的,我隐约知道我在做什么是类似rebase的。但我认为在我的情况下,我只是想根据需要进行提交,因为当前的一组提交几乎没有任何价值,无论使用“SAVE”和“SAVE_STUFF”这样的名称。但我从你的回应中得到的主要信息是,我不能使用'branchA',但必须首先检索它的''散列并将其用作'reset'的参数? –

+0

@AlexBollbach不,你是对的,重置为分行名称也应该起作用。 –

+0

它没有,我得到 '致命的:模棱两可的论据'branchA':修订和文件名' –