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

Модифицированные файлы в ветки git перетекают в другую ветвь

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

Например:

git статус в ветке git -build:

# On branch git-build
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   cvsup_current
#

Переключиться на ведущую ветвь

[[email protected] builder_scripts (git-build)]# git co master
M       builder_scripts/cvsup_current
Switched to branch "master"

git статус в главной ветке

[[email protected] builder_scripts (master)]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   cvsup_current
#

Почему файл отображается как измененный в главной ветке, хотя он был изменен в ветке git -build?

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

Кто-нибудь получил подсказку?

4b9b3361

Ответ 1

Это поведение по умолчанию git.

Вы можете использовать флаг -f для проверки, чтобы сделать "чистую проверку", если хотите.

Ответ 2

Почему файл отображается как измененный в главной ветке, хотя он был изменен в ветке git -build?

Ключом к запоминанию является то, что файл был не изменен в ветки git -build. Он был изменен только в вашей рабочей копии.

Только когда вы фиксируете изменения, возвращаемые в какую-либо ветвь, вы проверили

Ответ 3

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

git stash #work saved
git checkout master
#edit files
git commit
git checkout git-build
git stash apply #restore earlier work

git stash хранит стек изменений, поэтому вы можете безопасно хранить несколько контрольных точек. Вы также можете дать им имена/описания. Полная информация об использовании здесь.

Ответ 4

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

Ответ 5

  • Это не так, как ветки w20 зависят друг от друга, но также они не имеют полной кодовой базы отдельно для каждой ветки.
  • Для каждого фиксации git хранит объект, содержащий указатель на изменения. Таким образом, каждая ветвь указывает на свою последнюю фиксацию, а HEAD указывает на ветку, в которой вы находитесь.
  • Когда вы переключаете ветвь, указатель HEAD указывает на это конкретная фиксация ветки. Поэтому, если есть модифицированные файлы, поведение по умолчанию - это копирование по ним.

Вы можете сделать следующее, чтобы преодолеть эту проблему.

  • Используйте параметр -f, чтобы игнорировать изменения.

Если вы хотите сохранить изменения:

  1. Зафиксировать изменения локально в одной ветки, а затем переключить филиал.
  2. Используйте git stash, переключите ветвь, выполните свою работу, вернитесь к исходная ветвь и git stash apply.