2014-06-19 141 views
1

在使用git时,我倾向于使用大量“高级”功能在推送到远程设备之前重写和重新组织本地历史记录。我经常用来改变当前分支指向的提交的命令是git reset --hard <commit>。不幸的是,这个命令在你的本地目录中有未提交的更改运行时会有一些潜在的不良影响。由于这个功能,我失去了工作(虽然通常不多,但往往会经常犯)。移动分支指针比`git reset --hard`更安全吗?

是否有替代git reset --hard更改提交我的当前分支指向,当我有我的工作目录中未提交的更改不会导致数据丢失? (理想情况下,我希望像git checkout这改变了我当前分支指针而不是改变HEAD的。)

回答

2

为什么你会寻找一些git checkout,当你可以只使用git checkout

你正在寻找的选项是-B,它检出指定的ref并从中创建一个新的分支,或更新现有的分支。即使你指定了你已经在的分支,它也可以工作。

+0

Git的v1.7.3版本说明 ... “混帐结账-B ” 是说 “混帐分支-f ” 其次是 “混帐结账” –

+0

@UweGeuder无论是发行说明一个较短的方式不完整的,那么,或者在稍后的版本中放松。如果你在分支'master'上,'git branch -f master'是一个错误(“致命的:不能强制更新当前分支”),但是'git checkout -B master '确实有效。我已经用Git 1.9.4测试过了。 – hvd

+0

这几乎是完美的。我没有意识到'git checkout'的选项。现在我只需要编写一个处理“当前分支”填充的别名,所以我不必每次都输入它。谢谢你的帮助。 ;-) – Ajedi32

1

这些将保留更改

git reset --soft 

git reset --mixed 

做其中的一个后,您可以使用git diff来评估,如果你想扔的变化了。

+0

问题在于,它不仅保留了我的工作目录中的更改,还保留了分支本身的更改。我肯定希望分支上的更改重置,这就是为什么我首先移动分支指针。 – Ajedi32

相关问题