Путаница между слиянием и коммитом в Git - PullRequest
3 голосов
/ 17 сентября 2011

Я полный новичок в Git, не совсем уверен, что происходит.Мой друг и я вместе работаем над проектом.

Я получил все файлы с удаленного сервера git fetch, так что теперь у меня есть целая куча файлов.

  • Я редактирую некоторые из них, он редактирует некоторые из них и т. Д.

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

  • Я открываю Git GUI в Windows, с левой стороны есть две панели.

    Кто-то говорит Unstaged Changes - я понимаю, что это те вещи, которые я изменил, и они не будут обновлены до локального репозитория, если я не add их.

    Другой говорит Staged Changes (Will Commit).Внутри этого окна, когда я нажимаю на некоторые файлы, я вижу обновления, сделанные моими друзьями, которые НЕ отображаются в файлах, которые я редактирую, и я думаю, что я также вижу изменения, которые я сделал.

  • Я добавляю все файлы с git add . в мой каталог

  • Я нажимаю кнопку commit в графическом интерфейсе Git, теперь больше нет файловв любой из двух боковых панелей нет Unstaged Changes и нет Staged Changes (Will Commit).

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

Я все еще не уверен на 100%, что случилось.

  • Вопрос 1: Правильно ли я это сделал?

  • Вопрос 2: Что именно делает merge?

Потому что я продолжаю слияние с git merge origin/master, а слияние, похоже, ничего не делает.Я думал, что commit просто записывает запись вашей текущей версии в некоторые хэш-коды, но кажется, что commit на самом деле делает то, что я думал, merge делает - это объединяет изменения.

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

Ответы [ 3 ]

6 голосов
/ 17 сентября 2011

Я полагаю, вы неправильно понимаете git fetch.

Извлекает только изменения, внесенные в удаленный репозиторий, в вашем случае ветвь master в репозитории origin, но не применяет их к вашему дереву (сохраняет их только локально в каталоге .git). git merge, с другой стороны, применяет удаленные изменения к вашему хранилищу.

Вы должны использовать git pull origin master, чтобы получить изменения вашего друга и объединить их с вашим рабочим деревом. По сути, git pull - это то же самое, что и git fetch, за которым следует git merge.

Проверьте это: Git Fetch vs Pull


АЛЬТЕРНАТИВА

Ваш друг / вы не push отправляетесь в исходное хранилище. Ваш друг делает git push origin master после того, как совершает коммит? Комитеты являются локальными, и чтобы «поделиться» ими с остальным миром, вы должны git push.

Единственное исключение - это когда он работает напрямую с хранилищем origin. Тогда ему не нужно нажимать, поскольку все его коммиты уже находятся на origin в его ветке.

1 голос
/ 17 сентября 2011

Это займет много времени, чтобы объяснить, и я уже сделал это в серии статей . Посмотри на них. Они проведут вас через такие базовые вещи с точки зрения начинающего.

0 голосов
/ 18 сентября 2011

Если вы цените хорошее чтение, я бы предложил вам книгу Контроль версий с Git , чтобы закрепить ваши знания о Git.Статьи, безусловно, более оперативные и более дешевые, но Git - довольно сложный зверь, и я считаю, что хорошая основа окупается в долгосрочной перспективе.

Мои два цента.

...