Почему мастер git checkout применяет изменения из новой ветки? - PullRequest
0 голосов
/ 27 сентября 2019

Если я создаю новую ветку из master, затем делаю некоторые изменения, если я не фиксирую изменения и затем извлекаю master, мои изменения следуют за мной обратно в master.Я не понимаю ... Если я фиксирую изменения в новой ветке, а затем проверяю мастер, мастер остается без изменений.Разве это не рецепт для внесения нежелательных изменений в мастер?Каков правильный рабочий процесс здесь?

git init
echo something > newfile 
git add newfile 
git commit -a -m "first commit"
git checkout -b dev
echo $(date) >> newfile 
git checkout master
[user@toolbox test]$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   newfile

no changes added to commit (use "git add" and/or "git commit -a")
[user@toolbox test]$ cat newfile 
something
Thu 26 Sep 2019 09:00:49 PM GMT
[user@toolbox test]$

But...

[user@toolbox test]$ git checkout -- newfile
[user@toolbox test]$ git checkout dev
Switched to branch 'dev'
[user@toolbox test]$ git commit -a -m "I dont get this"
On branch dev
nothing to commit, working tree clean
[user@toolbox test]$ git checkout master
Switched to branch 'master'
[user@toolbox test]$ git status
On branch master
nothing to commit, working tree clean
[user@toolbox test]$ cat newfile 
something
[user@toolbox test]$ 

Я ожидал, что «оформить заказ» просто переключит ветви.Но, очевидно, есть кое-что, чего я не понимаю в рабочем процессе git.

1 Ответ

1 голос
/ 27 сентября 2019

Хитрость в том, чтобы понять, что у вас есть в ваших файлах в рабочем дереве, если вы попытаетесь извлечь другую ветку, git увидит, является ли измененный файл тем же (без ваших незафиксированных изменений) куда вы хотите перейти и в редакцию HEAD .... если это то же самое, то git понимает, что переключение, которое вы просите сделать, не является проблемой ... изменения вашего рабочего дерева (и новые файлы) будут сопровождать васна выключателе.Однако, если измененный файл не одинаков между HEAD и местом, куда вы хотите перейти, git откажется от оформления заказа (если, конечно, вы не принудительно).Итак, в общем, git старается следовать вашим командам настолько хорошо, насколько это возможно, и удерживает вас (не желая) от выполнения вашей работы (особенно от того, что еще не было совершено).Теперь ... сказав это, какая часть описанного вами процесса заставляет вас чесать голову?Это часть git checkout -- newfile?Потому что именно так вы просите git установить файл таким, каким он является на ревизии HEAD (другими словами, не обращайте внимания на изменения, которые я внес в этот файл, и установите его так, как он был до того, как я его отредактировал ... он может дажеиспользоваться для установки содержимого файла таким, как оно есть на другой branch / tag / revision .... и в этом случае вы поместите файл в индекс, ожидающий подтверждения).

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