Пуш без коммитов в Mercurial или Git - PullRequest
9 голосов
/ 08 сентября 2010

Похоже как для Mercurial, так и для Git, если я не фиксирую первым, то я не могу нажать?

Так что, если я не фиксирую (когда еще не готов), я не могунажать на удаленный сервер для резервного копирования моего кода?Код хранится в портативном компьютере, что может быть несколько хрупким при переносе.

Ответы [ 5 ]

17 голосов
/ 08 сентября 2010

Вы всегда готовы к коммиту.

Часто совершайте. Передайте ветку в процессе разработки и распространите ее так широко, как вы чувствуете.

Когда вы доберетесь до состояния, которое вы в настоящее время называете "готовым к принятию", изучите расхождение вашей ветви с восходящим потоком, выполните rebase -i, чтобы очистить ее и сделать так, как вы хотите.

Это будет проще, безопаснее, и, как правило, даст вам лучшие результаты, чем действительно усердно пытаться сделать все идеально до совершения. Помните: коммит не обязательно представляет желаемое постоянное состояние вселенной. Это просто где-то ты. Как вы публикуете это зависит от вас.

git позволяет очень легко публиковать ветку do-not-look-at-me для вашей незавершенной работы, которую вы впоследствии сможете перейти в свою официальную базу кода в любой точке и в любой форме, которая, по вашему мнению, вам больше подходит.

7 голосов
/ 08 сентября 2010

Просто создайте новую одноразовую ветвь.

Зафиксируйте полусгоревшие изменения в этой ветке и протолкните эту ветвь.

Когда ваши изменения будут готовы, раздавите свои полусырые коммиты(используя rebase) и объедините результат с вашим master и удалите одноразовую ветвь.(Вы можете удалить ветку из удаленного репозитория, используя git push <i>origin</i> :<i>branch</i> - запишите двоеточие перед именем ветки.)

Никогда не существует причины не фиксировать ваши изменения, хотя могут быть причины не фиксировать до определенной ветви , когда они еще не готовы.

3 голосов
/ 08 сентября 2010

Это верно.Цель push - поделиться одним или несколькими коммитами с другими репо.Ни один из них не предназначен в первую очередь как резервные копии (хотя некоторые люди используют их для этого).

Существует множество специализированных инструментов резервного копирования и онлайн-сервисов.См. Онлайн-резервное копирование для личного использования для получения списка.

2 голосов
/ 15 сентября 2010

Дай мне посмотреть, если сценарий правильный.У вас есть ...

  1. некоторые незафиксированные изменения в вашем рабочем каталоге, которые вы еще не хотели бы зафиксировать,
  2. некоторые невыпущенные изменения в вашем локальном хранилище,

... но ваш раздражающий босс хлопает вас по спине и говорит: «Эй! Когда вы собираетесь отодвинуть то изменение, которое вы упомянули на собрании персонала? Мы все ждем этого!»Он стоит там и ждет, пока вы это сделаете, так как вы легко и быстро избавитесь от него?

Это легко.Вы хотите использовать расширение MQ .Он поставляется в комплекте со стандартной установкой Mercurial.

Сначала добавьте его в файл .hgrc.

[extensions]
mq =

Чтобы сохранить незафиксированные изменения в записи очереди исправлений, выполните следующие действия:

$ hg qnew stash
$ hg qpop

Теперь нажмите ваши старые коммиты, чтобы ваш босс сорвался с вашей спины.

$ hg push

Наконец, восстановите ваш рабочий каталог следующим образом:

$ hg qpush

На этомУ вас все еще есть патч, записанный в вашей очереди патчей.Это просто помечено как «применено» сейчас.Закончите редактирование своего кода, затем сделайте это, чтобы обновить патч с вашими законченными изменениями и сообщением в журнале фиксации, затем завершите патч в наборе изменений:

$ hg qrefresh -m"Commit message goes here."
$ hg qfinish stash

Это основы, но вы гораздо большеможно сделать, если вы хотите стать действительно модным.Расширение MQ похоже на новый мир контроля версий, скрывающийся под хранилищем Mercurial.Это как Git stash, но более гибкий и немного менее запутанный.

Учиться, мутировать, развиваться!

2 голосов
/ 08 сентября 2010

Это правильно; Вы не можете выдвинуть незафиксированные изменения. Однако то, что ваши изменения еще не готовы, не означает, что вы не можете их зафиксировать. У меня нет опыта работы с Mercurial, но с Git вы можете изменить коммит (git commit --amend), чтобы изменить его после того, как он был зафиксирован. Вы также можете сделать серию коммитов, а затем сделать интерактивную перебазировку, чтобы объединить их в один коммит. Или вы можете просто делать коммиты по мере необходимости и не беспокоиться о том, чтобы ваша история была полностью нетронутой.

...