2014-06-19 2 views
1

При работе с git я стараюсь использовать множество «продвинутых» функций, чтобы переписать и реорганизовать мою локальную историю, прежде чем нажимать на удаленный компьютер. Одна команда, которую я часто использую, чтобы изменить фиксацию моей текущей ветви, указывает на значение git reset --hard <commit>. К сожалению, эта команда имеет некоторые потенциально нежелательные эффекты при запуске с незафиксированными изменениями в вашем локальном каталоге. Из-за этой функции я потерял работу (хотя обычно это не так много, как правило, я часто совершаю).Есть ли более безопасный способ перемещения указателя ветвления, чем `git reset -hard`?

Есть ли альтернатива git reset --hard для изменения фиксации мой текущей ветви указывает на, что не приводит к потере данных, когда у меня есть неподтвержденные изменения в моей рабочей директории? (В идеале, я хотел бы что-то вроде git checkout который изменяет мой текущий указатель ветви вместо изменения ГОЛОВУ.)

ответ

2

Зачем искать что-то какgit checkout, когда вы можете просто использовать git checkout?

Опция, которую вы ищете, это -B, которая проверяет указанный номер ссылки и либо создает из нее новую ветвь, либо обновляет существующую ветку. Он работает, даже если вы укажете ветку, в которой вы уже находитесь.

+0

Git v1.7.3 Release Notes ... "мерзавец контроль -B " более короткий способ сказать "GIT ветви -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

Смежные вопросы