Неотслеживаемые файлы между ветвями в Git
Я искал здесь, чтобы найти ответ, и кажется, что я могу просто ошибаться в предположениях о том, как должны работать ветки git.
У меня есть ветвь master
, и я создал ветвь функции с именем profiles
, где я выполняю определенную работу с профилями. Во время работы над профилями я изменил 5 или 6 файлов и добавил еще 5 или 6 новых файлов. Мне нужно было вернуться в ветвь master
, чтобы исправить быструю ошибку, и заметил все новые файлы и измененные файлы там, где они есть. Я предполагаю, что это имеет смысл, поскольку git не собирается удалять ненужные файлы из ветки master
и возвращает их для моей ветки profiles
, поскольку они, по сути, не отслеживаются. Но как насчет изменений в существующих файлах. Почему они появляются в главной ветке.
Какая самая лучшая практика здесь. Я еще не готов фиксировать изменения на локальном уровне. Должен ли я просто сбрасывать все эти изменения, переключитесь на master
, сделайте небольшое исправление, вернитесь к profiles
, а затем повторно установите кошелек?
Любая помощь приветствуется. Благодаря
Ответы
Ответ 1
"Я еще не готов фиксировать изменения локально".
Фиксирует в git локальные вещи, которые можно отменить, переделать и переделать по желанию. Это только когда вы нажимаете коммит где-то, на что вам нужно обратить внимание.
Плюс, коммиты видны локальным инструментам, таким как gitk
, и могут иметь различные отличия от них и могут быть переустановлены на другие коммиты и т.д. Это очень мощный инструмент. Научитесь использовать его.
Я часто делаю:
git add .; git commit -a -m 'WIP'
просто чтобы отбросить все в текущем дереве работы, если я думаю, что меня могут прервать. Если я сделаю еще несколько изменений, я использую:
git add .; git commit --amend
обновить мой "WIP" на месте. Когда я наконец готов к реальному коммиту, я просто:
git reset --soft HEAD~; git reset
и теперь я могу тщательно контролировать, каков будет окончательный коммит.
Ответ 2
Они не появляются в главной ветке - если вы сделали жесткий reset и чистый, они исчезнут. Git просто сохраняет ваши локальные изменения при переключении ветвей.
Это обычно полезно; вы, возможно, поняли, что хотите внести эти изменения в другую ветку, чем та, которую вы сейчас используете. Если изменения противоречат различию между двумя ветвями, Git откажется от переключения ветвей.
Вы правы в отношении наилучшего подхода, хотя - чистое переключение ветвей в моем опыте - одно из наиболее распространенных применений git stash
.
Ответ 3
Похоже, вы создали ветвь с 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