Разное

Обновить локальный репозиторий 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 с помощью удаленного репозитория

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.

git fetch не обновляет мой локальный репозиторий

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.

восстановить локальный репозиторий Git — qaru

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *