Почему git merge изменяется автоматически, когда я переключаю ветки? - PullRequest
0 голосов
/ 20 августа 2010

Я новичок в ветвлении в git, и меня немного смущает поведение на переключающихся ветках.Выполните следующие действия:

git init
Initialized empty Git repository in /Users/mads/Desktop/testing/.git/

echo 'hello a' > a.txt
echo 'hello b' > b.txt
git add *.txt
git commit -m "Initial commit"
[master (root-commit) 1ab870f] Initial commit
 2 files changed, 2 insertions(+), 0 deletions(-)
 create mode 100644 a.txt
 create mode 100644 b.txt

git status
# On branch master
nothing to commit (working directory clean)

git branch new_feature
git checkout new_feature
Switched to branch 'new_feature'

ls
a.txt   b.txt

echo "hello c" > c.txt
git add c.txt 

echo "hello a, new version" > a.txt

git status
# On branch new_feature
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   c.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   a.txt
#

git commit -m "Added new feature"

[new_feature 1ccda31] Added new feature
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 c.txt

git checkout master
M   a.txt
Switched to branch 'master'

cat a.txt 
hello a, new version

Почему изменения в файле .txt автоматически загружаются в мастер при оформлении заказа?Разве это не цель «слияния»?Я думал, что работа над веткой, а затем переключение на другую будет изолирована ...

Ответы [ 3 ]

6 голосов
/ 20 августа 2010

Вы никогда не запускали git add a.txt после его изменения.Git не отслеживает автоматически изменения, которые вы вносите в файлы, даже в файлы, которые вы уже добавили в репозиторий.(Это отличается от SVN, например). Вы должны явно git add каждый файл каждый раз, когда вы изменяете его, если вы хотите, чтобы изменения были версионированы.

Как вариант, вы можете использовать опцию -aна git commit, который будет автоматически добавлять и фиксировать любые изменения, внесенные в файлы, которые git уже отслеживает.Так что ближайшая вещь к svn commit будет git commit -a.

3 голосов
/ 20 августа 2010

Вы не добавили a.txt в свой коммит, поэтому он все еще является измененным рабочим файлом. Когда вы извлекаете мастер, он не хочет перезаписывать ваши изменения, поэтому изменение в a.txt все еще существует в вашем рабочем каталоге.

2 голосов
/ 20 августа 2010

Проблема в том, что изменение не было совершено.

Вот что означает M a.txt при повторной проверке мастера.

Если вы выполните commit -a вместо только коммита, он зафиксирует все измененные файлы. Или же вы должны добавить все измененные файлы, которые хотите зафиксировать.

Если все сделано правильно, вы увидите, что ветви хорошо изолированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...