2012-07-02 4 views
1

Наверное, я просто пропустил какой-то важный момент в git. Я использую PhpStorm IDE для процесса разработки и GIT как VCS. Каждый раз, когда я извлекаю изменения из одной из ветвей разработчиков, я получаю список коммитов других разработчиков, это совершенно нормально. Но когда я нажимаю изменения, я нажимаю не только мои фиксации, сделанные локально, но также фиксирует, которые были получены с помощью pull.Git commit list

Но почему это происходит? Почему другие разработчики совершают мои действия? Хотя, несмотря на то, что GIT хранит эти разработчики на удаленной ветке, они уже нажаты. Я что-то упускаю?

GIT команды (по истории IDE):

git pull --no-stat -v --progress origin trunk 

git push origin trunk:trunk 

GIT версия: 1.7.4.4, ОС: Mac OS X 10.7

+0

Вы используете 'rebase'? Насколько вы заметили, что изменения других разработчиков тоже выдвинуты? Это тот же удаленный сервер? –

+0

Какую версию git вы используете (номер версии и платформа)? Также, какую именно форму команд 'git push' и' git pull' вы используете? –

+0

@JonasWielicki nope, нет rebase. Я верю, месяц или около того. До этого мы использовали SVN. Да, сервер тот же. – Stormherz

ответ

3

Как сказал Vonc, когда вы запустите git pull origin trunk, git сначала запускает выборку (git fetch origin trunk), которая берет ветку ветки с пустого «источника» и сохраняет ее в FETCH_HEAD.

Обратите внимание, что это потенциально неожиданное поведение, и очень хорошая причина не использовать «4-аргумент» форму git-pull и git-fetch.

В любом случае, после запуска извлечения, git работает git merge FETCH_HEAD. Это берет вновь набранную удаленную ветвь и объединяет ее в локальную ветвь. Вы только что взяли у вас локальную ветку, а ветку «trunk» - из «origin» и объединили их.

Если у вас возникли проблемы с визуализацией этого, попробуйте запустить gitk или git log --graph --oneline --decorate, чтобы просмотреть историю графически. Вы должны уметь видеть, что две линии истории (ваша и удаленная) объединяются вместе. git log, без --graph или --first-parent и т. Д., Отобразит все коммиты, доступные из текущей ветви, но не будет различать, в какой ветви они находятся.

Неудивительно, что при запуске git push git берет эту объединенную историю и толкает ее.

Возможно, вы планировали использовать git fetch или git fetch origin, а не git pull origin trunk. Это приведет к обновлению ветвей из «origin» и сохранит их в ветках удаленного отслеживания (например, «origin/trunk»). Затем вы можете проверить это, например. git log origin/trunk. Если вы хотите объединить «источник/тубу» в свой локальный филиал, используйте git merge origin/trunk.

+0

Ничего себе, спасибо, что объясняет многое – Stormherz

1

Если вы действительно вытягивать изменения (git pull), вы бы принести и объединить их в вашей текущей ветке.

Если вы видите, что все остальные разработчики совершают при нажатии, возможно, это связано с тем, что ваш pull сконфигурирован, чтобы сначала выполнить переустановку (git pull --rebase).
Проверьте настройки конфигурации branch.autosetuprebase или branch.<name>.rebase.

+0

Проверено - rebase или autosetuprebase не установлено – Stormherz