Новичок в Git и GitHub, я делаю это неправильно? - PullRequest
2 голосов
/ 27 июня 2011

Я изменяю один существующий файл test.cs

  1. git add.
  2. git commit -m "my change to test.cs"
  3. мастер происхождения git pull
  4. > он сбрасывает SomeOtherFile.cs (измененный кем-то другим, не новым)
  5. > Я проверяю сборку ...)
  6. git push

Когда я захожу в github, под моим пушом находятся два коммита, один для 'test.cs' и один для SomeOtherFile.cs

Это ожидаемое поведение?

Спасибо ..

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Когда вы делаете git add ., вы добавляете изменения в любые файлы в вашем рабочем каталоге в индекс. Если вы хотите создать коммит только для test.cs, вместо этого выполните:

git add test.cs
0 голосов
/ 12 июля 2011

Так что вы сталкиваетесь здесь с разницей между слиянием и ребазой. Когда вы сделали:

git pull origin master

Вы создали коммит слияния, в котором слились изменения из master. Этот коммит слияния был пуст, но он был создан. Такое поведение от слияния ожидается, но на мой взгляд нежелательно. Коммит был создан для хранения различий между двумя ветвями (Ваш локальный и Исходный мастер) и создается независимо от наличия каких-либо различий. Если вместо этого выдали

git pull --rebase origin master

Вы бы сделали ребаз. Перебазировка ищет последний общий коммит, который есть у вашего локального и Origin Master, откладывает во временное хранилище ваши изменения с момента этого коммита, затем накладывает на них изменения из Origin Master (коммит SomeOtherFile.cs из NotYou) и, наконец, воспроизводит ваши изменения поверх этой новой обновленной линии. Это воспроизведение выполняется коммитом, так что если вы на 10 коммитов вперед, это произойдет 10 раз.

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

git rebase --continue

чтобы процесс продолжался. Здесь происходит то, что конфликты обрабатываются путем переопределения вашего исходного коммита, а не путем добавления коммита слияния. Но он сохраняет историю файлов в чистоте, а слияние происходит не так, как вы видели.

...