Должен ли я использовать git stash, чтобы сохранить текущие изменения моего проекта и передать его на github для доступа к другим компьютерам?


20

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

Я не хочу смешивать облачную синхронизацию (например, Dropbox) с удаленным отслеживанием GitHub.

Я просто передал незавершенные (и грязные) состояния моего кода раньше (и выдвинул его) только для того, чтобы перенести его на другой компьютер, чтобы продолжить работу. Я уверен, что это плохая практика.

Сегодня, однако, я столкнулся git stashпосле Googling немного. Кажется, это идеальное решение для того, что мне нужно.

Тем не менее, в документации не говорится, перейдет ли она на github, как только я внесу свои изменения. Кроме того, я хочу знать, есть ли более эффективный способ добиться мобильности, которая мне нужна.

Заранее спасибо!


1
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что на него уже был дан ответ о переполнении стека
David Arno

5
@DavidArno: Я не думаю, что это дубликат сайта. Вопрос StackOverflow касается «Могу ли я сделать X», а этот вопрос - «Является ли X хорошей практикой». По крайней мере, коренная причина вопроса в другом.
Грег Бургхардт

7
@DavidArno Последнее, что я проверил, «Уже ответил на SO», не является причиной, чтобы закрыть вопрос.
RubberDuck

Ответы:


28

Я просто передал незавершенные (и грязные) состояния моего кода раньше (и выдвинул его) только для того, чтобы перенести его на другой компьютер, чтобы продолжить работу. Я уверен, что это плохая практика.

Это нормально, чтобы совершить грязную незаконченную работу. Делай свою работу в тематической ветке. Фиксируйте рано, и совершайте часто. Читайте на Когда зафиксировать код? для некоторых руководящих принципов о том, когда сделать коммит. Специально для Git закрепите ветку темы и нажимайте на нее так часто, как вы хотите.

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


6
Я бы даже сказал это сильнее: никогда не работайте над веткой master, всегда используйте ветку темы. Вверяйте это так, как считаете нужным, нажимайте бесстрашно. Когда вы довольны изменениями, объедините их с мастером.
9000

Отличный совет! Я думаю, что большая путаница может произойти, потому что нам нужно добавить комментарий к коммиту, и иногда это будет буквально что-то вроде «задача в процессе» или что-то в этом роде. И да, я работаю один в этой ветке, поэтому все, что вы сказали, имеет смысл!
Леандро

4
Это также дает вам возможность объединять отдельные коммиты в один при слиянии вашей ветки git merge --squash bugfix
snoopy

2
Сообщения @Leandro commit должны быть настолько атомарными и четкими, насколько это имеет смысл. Например, даже если это WIP, вы можете сказать, например, «Добавление контроллера для обработки запросов страниц - WIP». Сообщения фиксации также предоставляют доступную для поиска историю изменений, внесенных в проект. Десять коммитов «WIP» не помогут никому, например, искать изменения, связанные с обработкой пользователей.
Бен

7

Тайники предназначены для локального использования, как временное место для размещения вещей, пока вы возитесь с ветками.

Если вы являетесь единственным, кто работает над веткой, нет проблем с фиксацией неработающего кода. Что я делаю, когда в подобных ситуациях делаю прерванный коммит, затем, потянув его в другое место, делаю, git reset HEAD~1чтобы отменить его. Конечно, это требует использования --forceвашего pullsи pushesкогда вы меняете местоположение.

Или я просто подожду, пока мой первый коммит и не сделает a git commit --amend. Или я просто раздавил все битые коммиты, когда я фиксирую ветку функций. Или я просто не беспокоюсь о нескольких явно помеченных нарушенных коммитах в моей истории, потому что я не ухожу, пока не окажусь в хорошей остановке. Вариантов много.


1
Я бы не советовал привыкать, --amendпоэтому это требует --forceтолчков. Лучше совершить только одноразовую ветку.
оставил около

1

stashна самом деле ничего не приносит удовлетворения, кроме как очистить ваш рабочий каталог, чтобы «уничтожить вашу ветку»; если вы не сразу stash popвернете состояние, все станет очень запутанным.

Если есть реальная работа, которую нужно сохранить, даже если она не подходит для постоянной записи репо, она все равно должна быть зафиксирована. Фактически, я никогда не оставляю свой рабочий каталог в состоянии, которое не контролируется версиями - я использую несколько очень простых скриптов Python, чтобы сохранить каждое изменение как временную фиксацию. Если вы хотите попробовать, вот что нужно сделать:

  1. Когда вы выполнили некоторую незаконченную работу и собираетесь покинуть рабочее место, выполните git-tmp-commit. Он автоматически зафиксирует все изменения в новой уникальной ветке.
  2. Нажмите эту ветку на удаленный.
  3. Уехать.
  4. Если вы хотите продолжить, снова клонируйте эту ветку с пульта. Я делаю это с помощью ccdскрипта, который фактически проверяет все с нуля до временной папки , автоматически выбирая самую последнюю ветку ... но вы также можете просто вручную извлечь и извлечь ветку temporary-commits/original-branch/YYYY-MM-DD...из существующего клона репозитория.
  5. Наконец, «отменить» изменения с помощью git-tmp-commit -r. Это вернет вас в исходную ветвь (например master) и оставит изменения временного коммита в рабочем каталоге, так что вы можете продолжить здесь, пока не настанет время для правильного коммита (или временного, если вам придется уйти снова).

То, как сценарий написан прямо сейчас, работает только в том случае, если в репозитории нет ветокmaster . Так что сомневайся, тебе придется git branch -d master; это, очевидно, не совсем идеально ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.