Подтвердить что ты не робот

Неотслеживаемые файлы между ветвями в Git

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

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

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

Любая помощь приветствуется. Благодаря

4b9b3361

Ответ 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