Не отслеживаемые файлы между ветками в Git - PullRequest
30 голосов
/ 02 февраля 2010

Я искал здесь, чтобы найти ответ, и, похоже, я просто делаю неправильные предположения о том, как должны работать git-ветки.

У меня есть master ветка и яЯ создал ветку функций под названием profiles, где я выполняю определенную работу с профилями.При работе с профилями я изменил 5 или 6 файлов и добавил еще 5 или 6 новых файлов.Мне нужно было переключиться обратно на ветку master, чтобы исправить быструю ошибку и заметить все новые и измененные файлы, которые там были.Я думаю, это имеет смысл, поскольку git не собирается удалять неотслеживаемые файлы из ветки master и возвращать их для моей ветки profiles, поскольку они фактически не отслеживаются.Но как насчет изменений в существующих файлах.Почему они появляются в основной ветке.

Какова лучшая практика здесь.Я еще не готов принять изменения локально.Должен ли я просто спрятать все эти изменения, переключиться на master, сделать небольшое исправление, переключиться обратно на profiles, затем повторно применить тайник?

Любая помощь приветствуется.Спасибо

Ответы [ 3 ]

36 голосов
/ 02 февраля 2010

"Я еще не готов зафиксировать изменения локально."

Коммиты в git - это локальные вещи, которые можно отменить, переделать и заново сделать по желанию. Только когда вы нажимаете коммит где-то, вам нужно обратить внимание.

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

Я часто делаю:

git add .; git commit -a -m 'WIP'

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

git add .; git commit --amend

чтобы обновить мой коммит "WIP" на месте. Когда я наконец готов к настоящему коммиту, я просто:

git reset --soft HEAD~; git reset

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

5 голосов
/ 02 февраля 2010

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

Это обычно полезно; Возможно, вы поняли, что хотите зафиксировать эти изменения в другой ветке, чем та, в которой вы находитесь в данный момент. Если изменения вступают в противоречие с разницей между двумя ветвями, git откажется переключать ветви.

Вы правы в отношении лучшего подхода - по моему опыту, чистое переключение ветвей - одно из самых распространенных применений git stash.

2 голосов
/ 21 декабря 2015

Звучит так, как будто вы создали ветку с git branch profiles, но не переключились на нее, поэтому вы остались на master, и он получил изменения файла, когда вы сделали коммит.

После создания ветки вам необходимо явно переключиться на нее с помощью git checkout (просто создайте новую ветку на лету и переключитесь на нее за один шаг, используя git checkout -b).

Если у вас есть изменения, которые вы не хотите потерять (или зафиксировать в текущей ветви), а вместо этого поместить в другую ветку, выполните:

git add -A
git stash
git checkout <other branch>
git stash pop

Более подробную информацию о git stash можно получить по адресу git-scm.com

...