GIT отличается от SVN - это распределенная система контроля версий. Не думайте об этом, как о SVN с сервером и несколькими клиентами, скорее это помогает думать об этом с точки зрения одноранговой связи.
Позвольте мне сначала ответить на ваши вопросы:
Переключение назад:
Нет вопроса о переключении обратно на new_clone - new_clone является хранилищем, а не ветвью, ветви являются master и new_branch, как указано git branch
. Если вы хотите переключиться на мастер (исходную ветку), используйте: git checkout master
или вообще git checkout <branch-name>
.
Вы можете использовать git push origin new_branch
, чтобы подтолкнуть ветку к источнику.
Как описано в (1), нет new_clone
ответвления. Используйте это: git diff new_branch master
См. (2)
В этом случае вы не используете слияние. Но скажем, у вас есть 2 рабочие копии, и вы хотите поделиться кодом между ними, вы можете использовать git merge для объединения изменений из одной копии в другую.
Давайте посмотрим на полный цикл, чтобы помочь вам понять все концепции. Алиса и Боб - 2 пользователя (пира), которые используют GIT:
Создать 2 пользователей Алису и Боба
sudo adduser alice
sudo adduser bob
Войдите как Алиса и настройте
su alice
git config --global user.name "Alice"
git config --global user.email alice@example.com
Войдите как Боб и настройте
su bob
git config --global user.name "Bob"
git config --global user.email bob@example.com
Алиса создает GIT-репозиторий
mkdir project
cd project/
git init
echo "Some text" > test
git add test
git commit -m "Adding test"
git status
Боб клонирует его, редактирует и фиксирует изменения
cd ~
git clone /home/alice/project myclone
cd myclone/
git log # See the changes from Alice
echo "Some text - edited by Bob" > test
git commit -m "Making changes to test" -a
git diff
Алиса объединяет изменения с Бобом
git remote add bob /home/bob/myclone
git fetch bob
git branch -a # To list
git log -p master..bob/master
git merge --no-ff bob/master # Merge changes from Bob
Алиса вносит изменения в экспериментальную ветку и затем фиксирует ее:
git branch experimental
git branch # To list
git checkout experimental
git branch # To list
echo "Some text - edited by Bob, further edited by Alice" > test
git commit -m "Further modifying test" -a
git checkout master
git log -p master..experimental
git merge --no-ff experimental
git branch -d experimental # To delete the branch
Боб тянет изменения:
git pull
Обратите внимание, что здесь нет центрального сервера, Алиса и Боб равноправны.
Подробнее здесь: