Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Работа с коммитами и ветками

#git


1) Команда git status на сервере, в директории содержащей работающий проект, в ветке
master выдаёт:


  On branch master
  Your branch is ahead of 'origin/master' by 290 commits.




Что это значит?
Нашёл ответ: local/master на 290 коммитов опережает remote/master. 
И... что же это всё равно значит?

Решение которое нашёл:

$ git pull origin mybranch
$ git pull origin


Должно вроде бы избавить от "Your branch is ahead of 'origin/master' by 290 commits."...
не понимаю однако зачем делать pull, проект на сервере по идее соответствует тому что
в репозитории, ведь это рабочий проект.

2) Ветвь testing содержит много изменений, однако файлы на сервере в директории testing
отличаются от того, что в репозитории. Отличий много... чтобы не разбираться что к
чему решено было скопировать файлы из ветки master в ветку testing.
Мануалы говорят примерно следующее "Надо переместить указатель HEAD на master, после
чего в директории testing: git reset -hard и git pull
Верно ли это? Как скопировать всё из master в testing?



--------------------------------- Updated -----------------------------------

Спасибо с п.1 разобрался. С п.2 проблемы...

Сделал 


  git merge /origin/master


на сервере в папке с тестовой копией проекта. Далее надо так понимаю сделать git
push, чтобы эти изменения были всем доступны (т.е. локал/оригин c тестового сервера
затолкать в римоут/оригин). Но не даёт git push сделать:


  [rejected] testing ->
  testing[non-fast-forward] To prevent
  you from loosing your history,
  non-fast-forward were rejected. Merge
  the remote changes (e.g. git pull).


git pull думаю здесь не нужно, ведь скопировал ветку master на ветку testing (т.е.
master to local/origin/testing)

git status сообщает:


  Your branch and 'origin/testing' have
  diverged and have 272 and 5374
  commit(s), each respectively


Попробовал на сервере в папке с тестовым проектом: git rebase /origin/testing
Выскакивают конфликты, понятия не имею что там за изменения в файлах и когда они
делались, откатился от rebase назад.

Так понимаю если сделать git push -f избавит от описанных выше проблем, но потеряется
история разработки, что не хотелось бы.
Посоветуйте, пожалуйста, как справиться с этими проблемами
    


Ответы

Ответ 1



1) Гит - распределенная система, т.е. локально хранится копия репозитория. И вся работа строится так, что сначала изменения вносятся в локальную рабочую копию (команда commit), а потом передаются в удаленный репозиторий (команда push). Ошибка Your branch is ahead of 'origin/master' by 290 commits. означает, что были сделаны 290 коммитов в локальной рабочей копии, но не отправлены в удаленный репозиторий. Чтобы они попали в удаленный репозиторий, нужно выполнить команду git push Если у вас такая информация пишется в рабочей копии на боевом сервере, значит кто-то правил файлы прямо там. Чтобы эти изменения были доступны всем, нужно выполнить push и вытолкнуть изменения в общий удаленный репозиторий 2) Команда git reset --hard Удаляет все незакоммиченные изменения. Чтобы скопировать изменения из одной ветки в другую, нужно воспользоваться командой git merge branchname Она сливает изменения из ветки branchname в текущую ветку. Переключаться между ветками можно командой git checkout branchname Переключение может не произойти, если есть незакоммиченные изменения. Их можно закоммитить git commit можно спрятать git stash при этом они перестают быть видны, пока не будет выполнена команда git stash apply а можно сбросить как вы написали - командой reset

Комментариев нет:

Отправить комментарий