Обновить локальный репозиторий git: Git, как обновить проект ? — Хабр Q&A
Добавление изменений в Git и GitHub
Копирование репозитория с GitHub
Для выполнения заданий вы будете использовать приватный репозиторий, который создан на GitHub.
Для работы с ним локально, его нужно скопировать.
Для этого используется команда git clone:
$ git clone ssh://[email protected]/pyneng/online-4-natasha-samoylenko.git
Cloning into 'online-4-natasha-samoylenko'...
remote: Counting objects: 241, done.
remote: Compressing objects: 100% (191/191), done.
remote: Total 241 (delta 43), reused 239 (delta 41), pack-reused 0
Receiving objects: 100% (241/241), 119.60 KiB | 0 bytes/s, done.
Resolving deltas: 100% (43/43), done.
Checking connectivity... done.
В этой команде вам нужно сменить имя репозитория “online-4-natasha-samoylenko” на свой репозиторий.
В итоге, в текущем каталоге, в котором была выполнена команда git clone, появится каталог с именем равным имени репозитория.
В моем случае — online-4-natasha-samoylenko.
Если вы перейдете в этот каталог, то увидите в нем содержимое репозитория на GitHub.
Работа с репозиторием
Предыдущая команда не просто скопировала репозиторий локально, но и настроила соответствующим образом Git:
- был создан каталог .git
- скачаны все данные репозитория
- скачаны все изменения, которые были в репозитории
- ваш репозиторий на GitHub настроен как remote для этого репозитория
Это значит, что теперь у вас готов полноценный репозиторий Git, в котором вы можете работать.
Обычно, последовательность работы будет такой:
- перед началом работы, синхронизируете локальное содержимое с GitHub командой git pull (синхронизация из GitHub в локальный репозиторий)
- редактируете какие-то файлы репозитория
- добавляете их в staging командой git add
- делаете commit с помощью git commit
- когда вы готовы закачать локальные изменения на GitHub, делаете git push
Если вы работаете с заданиями с работы и дома, надо не забывать первый и последний шаг:
- первый шаг — обновляет ваш локальный репозиторий на виртуалке
- последний шаг — загружает изменения на GitHub
Синхронизация из GitHub в локальный репозиторий
Все команды выполняются внутри каталога репозитория (в примере выше — online-4-natasha-samoylenko)
Команда git pull:
Если содержимое локального репозитория одинаково с удаленным репозиторием — GitHub, вывод будет таким:
$ git pull
Already up-to-date.
Если что-то было изменено, вывод будет примерно таким:
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0
Unpacking objects: 100% (5/5), done.
From ssh://github.com/pyneng/online-4-natasha-samoylenko
89c04b6..fc4c721 master -> origin/master
Updating 89c04b6..fc4c721
Fast-forward
exercises/03_data_structures/task_3_3.py | 2 ++
1 file changed, 2 insertions(+)
Добавление новых файлов или изменений в существующих файлах
Добавление всех новых файлов или изменений в существующих:
Если необходимо добавить конкретный файл (в данном случае — README.md):
Commit
При выполнении commit обязательно надо указать сообщение.
Будет лучше, если сообщение будет со смыслом, а не просто “update” или подобное:
$ git commit -m "Сделал задания 4.1-4.3"
Push на GitHub
Для загрузки всех локальных изменений на GitHub, используется git push:
$ git push origin master
Counting objects: 5, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 426 bytes | 0 bytes/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To ssh://[email protected]/pyneng/online-4-natasha-samoylenko.git
fc4c721..edcf417 master -> master
Перед выполнением git push, можно выполнить команду
$ git log -p origin/master..
— она покажет какие изменения вы собираетесь добавлять в свой репозиторий на GitHub.
Как обновить удаленный репозиторий после выполнения git rebase
Когда мы обновляем локальную feature ветку с помощью git rebase
, мы переписываем историю. Таким образом, при попытке обновить свою удаленную ветку с помощью git push
запрос будет отклонен. В таком случае, может помочь --force
и --force-with-lease
для принудительного обновления удаленной ветки.
Поскольку мы используем rebase
, мы на самом деле переписываем историю, как упоминалось ранее в статье Как обновить свою ветку последними изменениями с основной ветки. Есть один странный побочный эффект, с которым можно столкнуться. После того как мы сделаем git rebase
в нашей ветке и попытаемся синхронизировать её с помощью git push
, то получим сообщение о том, что оно было отклонено.
! [rejected] имя_ветки -> имя_ветки (non-fast-forward)
error: не удалось отправить некоторые ссылки в «https://github.com/имя_репозитория»
подсказка: Обновления были отклонены, так как верхушка вашей текущей ветки
подсказка: позади ее внешней части. Заберите и слейте внешние изменения
подсказка: (например, с помощью «git pull …») перед повторной попыткой отправки
подсказка: изменений.
подсказка: Для дополнительной информации, смотрите «Note about fast-forwards»
подсказка: в «git push --help».
Причина, по которой он был отклонен, заключалась в том, что HEAD нашей текущей ветки находится позади удаленной версии, что может показаться странным, потому что мы фактически добавили новые изменения.
Причина в том, что мы переписали эти комментарии. Git их больше не распознает, и поэтому мы должны синхронизироваться обратно, чтобы изменить результат в удаленном репозитории. Однако, нам это не нужно. На самом деле мы хотим переопределить нашу удалённую копию, так как мы знаем, что наша локальная ветка обновлена.
Используем git push -f
, который переопределяет ветку удаленного репозитория, в которую в настоящий момент отправляем изменения.
Важно помнить — это нужно делать не на ветке master
, а только на своей feature ветке, и делать это только в том случае, если она на самом деле является нашей личной, и ею никто не делится.
Кроме того, можно добавить --force-with-lease
, который более безопасен, так как выполняет некоторые дополнительные проверки. Будучи на ветке разработки делаем:
git push --force-with-lease
Теперь мы переопределили нашу удалённую копию.
Как обновить раздвоенный репозиторий GitHub?
Настройки
прежде чем вы сможете синхронизировать, вам нужно добавить пульт, который указывает на вышестоящий репозиторий. Возможно, вы сделали это, когда первоначально раздвоились.
Совет: синхронизация вилки обновляет только локальную копию репозитория; она не обновляет репозиторий на GitHub.
$ git remote -v
# List the current remotes
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
$ git remote add upstream https://github.com/otheruser/repo.git
# Set a new remote
$ git remote -v
# Verify new remote
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
upstream https://github.com/otheruser/repo.git (fetch)
upstream https://github.com/otheruser/repo.git (push)
синхронизация
есть два шага, необходимые для синхронизации репозитория с восходящим: сначала вы должны извлечь из удаленного, затем вы должны объединить нужную ветвь в локальную ветвь.
Fetching
извлечение из удаленного репозитория приведет к его филиалам и их соответствующим коммитам. Они хранятся в вашем локальном репозитории в специальных ветвях.
$ git fetch upstream
# Grab the upstream remote's branches
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/otheruser/repo
* [new branch] master -> upstream/master
теперь у нас есть главная ветвь вверх по течению хранится в локальной ветви, вверх по течению / master
$ git branch -va
# List all local and remote-tracking branches
* master a422352 My local commit
remotes/origin/HEAD -> origin/master
remotes/origin/master a422352 My local commit
remotes/upstream/master 5fdff0f Some upstream commit
слияние
теперь, когда мы получили вышестоящий репозиторий, мы хотим объединить его изменения в нашей локальной ветви. Это приведет к синхронизации этой ветви с восходящим потоком, не теряя наших локальных изменений.
$ git checkout master
# Check out our local master branch
Switched to branch 'master'
$ git merge upstream/master
# Merge upstream's master into our own
Updating a422352..5fdff0f
Fast-forward
README | 9 -------
README.md | 7 ++++++
2 files changed, 7 insertions(+), 9 deletions(-)
delete mode 100644 README
create mode 100644 README.md
если у вашей локальной ветви не было уникальных коммитов, git вместо этого выполнит «перемотку вперед»:
$ git merge upstream/master
Updating 34e91da..16c56ad
Fast-forward
README.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
Совет: Если вы хотите обновить свой репозиторий на GitHub, следуйте инструкциям здесь
Заливаем гит репозиторий на гитхаб
Всем привет. В прошлом уроке мы создали базовый репозиторий гита и сделали несколько коммитов. Сейчас мы будем заливать нашу работу в гитхаб. Зачем это нужно? Хранить гит проект на своей машине конечно хорошо, но не надежно и не удобно. Для этого используют разные сервисы, где можно хранить свой проект и в любой момент слить его на любую машину, что очень удобно. Самый популярный из этих сервисов github.com. С ним мы и будем работать.
Для тех кто не знает, гитхаб это сервис, который хранит репозитории гита. Т.е. вы можете туда залить свой проект, кто-то его может скачать и работать над ним вместе с вами например.
Для начала вам понадобится завести аккаунт на гитхаб. У меня аккаунт уже есть, поэтому я нажимаю
New Repository. И указываю имя learning_git. И нажимаю Create repository.
Мы видим страничку быстрого запуска. Тут написано что делать если у вас новый репозиторий гита и что делать если у вас уже готовый проект, который вы хотите залить.
В нашем случае настройка должна стоять на HTTS. И нас интересует push существующего репозитория. Для этого копируем первую строчку в консоль проекта.
git remote add origin https://github.com/monsterlessons/learning_git.git
Это добавляет новый удаленный сервер гитхаба в список серверов куда мы можем пушить. Origin это название сервера. Обычно оно стандартное хотя вы можете выбрать любое имя.
То что он у нас добавился мы можем посмотреть командой
git remote -v
И оно нам выводит репозиторий, который мы добавили.
Теперь давайте вставим вторую строчку.
git push -u origin master
В консоли оно запрашивает логин и пароль. Вводим оба.
Видим сообщение что данные были записаны в нашу репу на гитхабе.
Теперь если мы обновим окно репозитория в браузере, то мы увидим наш репозиторий на гитхабе.
Мы видим список файлов и название последнего коммита который менял этот файл.
Мы можем кликнуть на файл и посмотреть его содержимое.
Мы можем нажать history и увидеть коммиты, которые меняли этот файл.
Нажав на любой из коммитов мы видим изменения, которые были сделаны, так же как мы смотрели изменения локально с помощью команды git show.
И напоследок в этом уроке еще 2 команды. Первая команда это
git pull
Все что она делает, это сливает в проект новые изменения если они есть из удаленного репозитария. В нашем случае с гитхаба. В нашем случае оно написало что проект up to date так как у нас последние изменения. Но если мы вы дома сделали какие-то изменения, запушили, пришли на работу и написали бы git pull, то оно бы стянуло изменения, которые вы сделали в проекте дома, если вы конечно не забыли их запушить.
Вторую команду вы впринципе уже видели когда мы пушили наши изменения на гитхаб. Это команда
git push
Это очень популярная команда. Если вы хотите запушить ваши изменения на сервер, то вы всегда ее изпользуете.
Давайте создадим файл 2.js и запушим его на гитхаб.
touch 2.js
git add .
git commit -m "Added 2.js"
git push
Если теперь мы обновим страницу в браузере, то увидим что у нас стало 4 коммита, а в списке файлов появился 2.js.
github — Обновление локального репозитория git с помощью удаленного репозитория
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
git fetch не обновляет мой локальный репозиторий
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
восстановить локальный репозиторий Git — qaru
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.