Изменение истории коммитов
rebase
Источник (спасибо автору за разъяснение): http://tonyganch.com/git/rebase/
Внимание!
git rebase меняет hash коммитов! Поэтому, git rebase можно делать только в локальном репозитории, и только до публикации коммитов (push)!
Слияние коммитов
Начать процесс интерактивного слияния 2-х последних коммитов:
Примечание
После запуска rebase — откроется текстовый редактор. Сверху идут старые коммиты, внизу более свежие.
Доступные действия с коммитами в текстовом редакторе:
- Указать как основной коммит-приемник при слиянии.
- Слить коммиты, используя комментарий основного pick-коммита.
- Слить коммиты вместе с их комментариями.
- Изменить комментарий коммита. Укажите только опцию , а имя коммита вы укажете при выходе из интерактивного режима.
Для удаления коммита — просто удалите строку в интерактивном редакторе коммитов.
Управление процессом rebase
Отменить незавершенный rebase:
Откатить успешный rebase можно только с помощью reset —hard:
Продолжить выполнение команды rebase:
Пропустить наложение коммита и перейти к следующему:
Пример слияния коммитов
Начать процесс интерактивного слияния коммитов в пределах 6-ти последних:
Примечание
При слиянии коммита, Git вливает его в предыдущий в списке. Вы можете изменить порядок коммитов перед слиянием. Например:
Подготовить коммиты к слиянию:
Состояние коммитов:
Выполнить сливание в автоматическом режиме:
Изменить комментарий к последнему коммиту:
Изменить комментарии в диапазоне последних 3-х коммитов:
Сдвинуть коммиты
Принять изменения и сдвинуть свои незапушенные коммиты вверх (как будто вы сделали pull, до того как закоммитили изменения):
Наложить коммиты из ветки my-fix на последний коммит ветки stage:
Внимание!
Обратите внимание, что при разрешении конфликтов, theirs — это изменения из ветки, в которую мы влили коммиты и сдвинули наш коммит на верх, а ours — это изменения, которые мы получили из чужих новых коммитов. После разрешения конфликтов — вызовите:. #cvs, #git
#cvs, #git
Основы работы с удаленным репозиторием¶
git clone — создание копии (удаленного) репозитория
Для начала работы с центральным репозиторием, следует создать копию оригинального проекта со всей его историей локально.
Клонируем репозиторий, используя протокол http:
git clone http://user@somehost:port/~user/repository/project.git
Клонируем репозиторий с той же машины в директорию :
git clone /home/username/project myrepo
Клонируем репозиторий, используя безопасный протокол ssh:
git clone ssh://user@somehost:port/~user/repository
У git имеется и собственный протокол:
git clone git://user@somehost:port/~user/repository/project.git/
Импортируем svn репозиторий, используя протокол http:
git svn clone -s http://repo/location
-s
git fetch и git pull — забираем изменения из центрального репозитория
Для синхронизации текущей ветки с репозиторием используются команды git fetch и git pull.
git fetch — забрать изменения удаленной ветки из репозитория по умолчания, основной ветки; той, которая была использована при клонировании репозитория. Изменения обновят удаленную ветку (remote tracking branch), после чего надо будет провести слияние с локальной ветку командой git merge.
git fetch /home/username/project — забрать изменения из определенного репозитория.
Возможно также использовать синонимы для адресов, создаваемые командой :
git remote add username-project /home/username/project
git fetch username-project — забрать изменения по адресу, определяемому синонимом.
Естественно, что после оценки изменений, например, командой , надо создать коммит слияния с основной:
git merge username-project/master
Команда сразу забирает изменения и проводит слияние с активной веткой.
Забрать из репозитория, для которого были созданы удаленные ветки по умолчанию:
git pull
Забрать изменения и метки из определенного репозитория:
git pull username-project --tags
Как правило, используется сразу команда .
git push — вносим изменения в удаленный репозиторий
После проведения работы в экспериментальной ветке, слияния с основной, необходимо обновить удаленный репозиторий (удаленную ветку). Для этого используется команда git push.
Отправить свои изменения в удаленную ветку, созданную при клонировании по умолчанию:
git push
Отправить изменения из ветки master в ветку experimental удаленного репозитория:
git push ssh://yourserver.com/~you/proj.git master:experimental
В удаленном репозитории origin удалить ветку experimental:
git push origin :experimental
В удаленную ветку master репозитория origin (синоним репозитория по умолчанию) ветки локальной ветки master:
git push origin master:master
Отправить метки в удаленную ветку master репозитория origin:
git push origin master --tags
Изменить указатель для удаленной ветки master репозитория origin (master будет такой же как и develop)
git push origin origin/develop:master
Добавить ветку test в удаленный репозиторий origin, указывающую на коммит ветки develop:
git push origin origin/develop:refs/heads/test
Абсолютные и относительные ссылки
Адрес ссылки может быть как абсолютным, так и относительным. Абсолютные адреса должны начинаться с указания протокола (http:// или https://) и содержать имя домена. Относительные ссылки ведут отсчёт от корня сайта или текущего документа.
Протокол для сайта можно не указывать, в таком случае ссылка будет начинаться сразу с // без протокола. Браузер сам подставит нужный протокол, на котором работает сайт. В примере 2 показано создание подобной ссылки.
Пример 2. Использование ссылки
<!DOCTYPE html>
<html>
<head>
<meta charset=»utf-8″>
<title>Абсолютный адрес</title>
</head>
<body>
<p><a href=»//facebook.com»>Facebook</a></p>
</body>
</html>
В данном примере ссылка вида <a href=»//facebook.com»>Facebook</a> является абсолютной и ведёт на главную страницу Facebook. Учтите, что при открытии такой страницы в локальном документе произойдёт ошибка, поскольку такие ссылки работают только на веб-сервере.
Когда в адресе указывается только домен (//webref.ru) или после домена идёт имя папки (//webref.ru/css/), то веб-сервер автоматически загружает документ, обычно с именем index.html или index.php. Таким образом, полный путь к сайту будет https://webref.ru/index.php, а сокращённый — //webref.ru.
Абсолютные ссылки обычно применяются для указания на другой ресурс, впрочем, допустимо делать абсолютные ссылки и внутри текущего сайта. Однако подобное практикуется нечасто, поскольку такие ссылки достаточно длинные и громоздкие. Поэтому внутри сайта преимущественно используются относительные ссылки.
Ссылки относительно текущего документа
При создании относительных ссылок надо понимать, какое значение для атрибута href следует указывать, поскольку оно зависит от исходного расположения файлов. Рассмотрим несколько типичных вариантов.
1. Файлы располагаются в одной папке (рис. 3).
Рис. 3
Необходимо сделать ссылку из исходного документа source.html на target.html. В таком случае код будет следующий.
2. Файлы размещаются в разных папках (рис. 4).
Рис. 4
Когда исходный документ хранится в какой-либо папке, а ссылаемый в корне сайта, то перед именем документа в адресе ссылки следует поставить две точки и косую черту (/), как показано ниже.
Две точки в данном случае означают выйти из текущей папки на уровень выше.
3. Файлы размещаются в разных папках (рис. 5).
Рис. 5
Теперь исходный файл находится в двух вложенных папках, и чтобы сослаться на документ в корне сайта, требуется повторить написание предыдущего примера два раза.
Аналогично обстоит дело с любым числом вложенных папок.
4. Файлы размещаются в разных папках (рис. 6).
Рис. 6
Теперь ситуация меняется, исходный файл располагается в корне сайта, а файл, на который необходимо сделать ссылку — в папке. В этом случае путь к файлу будет следующий.
Заметьте, что никаких дополнительных точек перед именем папки нет. Если файл находится внутри не одной, а двух папок, то путь к нему записывается так.
5. Файлы размещаются в разных папках (рис. 7).
Рис. 7
Каждый файл располагается в своей папке и чтобы перейти из одной папки в другую ссылка будет следующей.
Ссылки относительно корня сайта
Иногда можно встретить путь к файлу относительно корня сайта, он выглядит как «/folder/target.html». Так, запись <a href=»/course/»>Курсы</a> означает, что ссылка ведёт в папку с именем course, которая располагается в корне сайта, а в ней необходимо загрузить файл index.html.
Опять же, такая форма записи не работает на локальном компьютере, а только под управлением веб-сервера.
Точки зрения на редиректы
SEO — область знаний, которая полна мифов и гипотез.
Ниже мы тезисно перечислим различные точки зрения о работе редиректов. Верить им или нет — оставляем на ваше усмотрение.
- 301 редирект не передает\передает санкции поисковых машин
- 302 редирект не передает\передает санкции поисковых машин
- 302 редирект передает ссылочный вес в очень малом объеме
Куда вас отредиректили, или как не сломать все
Редиректы — это базовая механика, которую должен понимать каждый SEO-специалист
Они имеют колоссальное влияние на оптимизацию сайта, поэтому очень важно использовать их правильно. Не злоупотребляйте HTML- и JS-перенаправлениями, используйте корректные коды ответа сервера и внимательно выбирайте страницу, на которую настраиваете редирект
Очень важно, чтобы ваши перенаправления не путали поисковых роботов и не вызывали недоумения у пользователей.
Просмотры:
6 690
Александр Лушин
Александр Лушин — независимый SEO-эксперт. Занимается SEО и созданием сайтов с 2008 года. Специализируется на аудитах сайтов, поисковом продвижении и решениях под ключ. Руководит небольшой командой специалистов.
Прочие команды и необходимые возможности
Хэш — уникальная идентификация объектов
В git для идентификации любых объектов используется уникальный (то есть с
огромной вероятностью уникальный) хэш из 40 символов, который определяется
хэшируюшей функцией на основе содержимого объекта. Объекты — это все: коммиты,
файлы, тэги, деревья. Поскольку хэш уникален для содержимого, например, файла,
то и сравнивать такие файлы очень легко — достаточно просто сравнить две строки
в сорок символов.
Больше всего нас интересует тот факт, что хэши идентифицируют коммиты. В этом
смысле хэш — продвинутый аналог ревизий Subversion. Несколько примеров
использования хэшей в качестве способа адресации.
Ищет разницу текущего состояния проекта и коммита за номером… сами видите,
каким:
То же самое, но оставляем только шесть первых символов. Git поймет, о каком
коммите идет речь, если не существует другого коммита с таким началом хэша:
Иногда хватает и четырех символов:
Читает лог с коммита по коммит:
Разумеется, человеку пользоваться хэшами не так удобно, как машине, именно
поэтому были введены другие объекты — тэги.
git tag — тэги как способ пометить уникальный коммит
Тэг (tag) — это объект, связанный с коммитом; хранящий ссылку на сам коммит,
имя автора, собственное имя и некоторый комментарий. Кроме того, разработчик
может оставлять на таких тегах собственную цифровую подпись.
Кроме этого в git представленные так называемые «легковесные тэги» (lightweight
tags), состоящие только из имени и ссылки на коммит. Такие тэги, как правило,
используются для упрощения навигации по дереву истории; создать их очень легко.
Создаёт «легковесный» тэг, связанный с последним коммитом; если тэг уже есть,
то еще один создан не будет:
Помечает определенный коммит:
Удаляет тег:
Перечисляет тэги:
Создаёт тэг для последнего коммита, заменяет существующий, если таковой уже был:
После создания тэга его имя можно использовать вместо хэша в любых командах
вроде git diff, git log и так далее:
Обычные тэги имеет смысл использовать для приложения к коммиту какой-либо
информации, вроде номера версии и комментария к нему. Иными словами, если в
комментарии к коммиту пишешь «исправил такой-то баг», то в комментарии к тэгу по
имени «v1.0» будет что-то вроде «стабильная версия, готовая к использованию».
Создаёт обычный тэг для последнего коммита; будет вызван текстовый редактор для
составления комментария:
Создаёт обычный тэг, сразу указав в качестве аргумента комментарий:
Команды перечисления, удаления, перезаписи для обычных тэгов не отличаются от
команд для «легковесных» тэгов.
Относительная адресация
Вместо ревизий и тэгов в качестве имени коммита можно опираться на еще один
механизм — относительную адресацию. Например, можно обратиться прямо к предку
последнего коммита ветки master:
Если после «птички» поставить цифру, то можно адресоваться по нескольким предкам
коммитов слияния:
Ищет изменения по сравнению со вторым предком последнего коммита в master; HEAD
здесь — указатель на последний коммит активной ветки.
Аналогично, тильдой можно просто указывать, насколько глубоко в историю ветки
нужно погрузиться.
Что привнес «дедушка» нынешнего коммита:
То же самое:
Обозначения можно объединять, чтобы добраться до нужного коммита:
Файл .gitignore — объясняем git, какие файлы следует игнорировать
Иногда по директориям проекта встречаются файлы, которые не хочется постоянно
видеть в сводке git status. Например, вспомогательные файлы текстовых редакторов,
временные файлы и прочий мусор.
Заставить git status игнорировать определенные файлы можно, создав в корне или
глубже по дереву (если ограничения должны быть только в определенных директория)
файл .gitignore. В этих файлах можно описывать шаблоны игнорируемых файлов
определенного формата.
Пример содержимого такого файла:
Существуют и другие способы указания игнорируемых файлов, о которых можно узнать
из справки git help gitignore.
Серверные команды репозитория
Команда создания вспомогательных файлов для dumb-сервера в $GIT_DIR/info и
$GIT_OBJECT_DIRECTORY/info каталогах, чтобы помочь клиентам узнать, какие ссылки
и пакеты есть на сервере:
Проверяет сколько объектов будет потеряно и объём освобождаемого места при
перепаковке репозитория:
Переупаковывает локальный репозиторий:
Отмена действия браузера
Есть два способа отменить действие браузера:
- Основной способ – это воспользоваться объектом . Для отмены действия браузера существует стандартный метод .
- Если же обработчик назначен через (не через ), то также можно вернуть из обработчика.
Возвращать не нужно
Обычно значение, которое возвращает обработчик события, игнорируется.
Единственное исключение – это из обработчика, назначенного через .
В других случаях не нужен, он никак не обрабатывается.
Рассмотрим меню для сайта, например:
Данный пример при помощи CSS может выглядеть так:
В HTML-разметке все элементы меню являются не кнопками, а ссылками, то есть тегами . В этом подходе есть некоторые преимущества, например:
- Некоторые посетители очень любят сочетание «правый клик – открыть в новом окне». Если мы будем использовать или , то данное сочетание работать не будет.
- Поисковые движки переходят по ссылкам при индексации.
Например, вот так:
Если мы уберём , то после выполнения обработчика события браузер выполнит «действие по умолчанию» – переход по адресу из . А это нам здесь не нужно, мы обрабатываем клик сами.
Кстати, использование здесь делегирования событий делает наше меню очень гибким. Мы можем добавить вложенные списки и стилизовать их с помощью CSS – обработчик не потребует изменений.
События, вытекающие из других
Некоторые события естественным образом вытекают друг из друга. Если мы отменим первое событие, то последующие не возникнут.
Например, событие для поля приводит к фокусировке на нём и запускает событие . Если мы отменим событие , то фокусирования не произойдёт.
В следующем примере попробуйте нажать на первом – происходит событие . Но если вы нажимаете по второму элементу, то события не будет.
Это потому, что отменено стандартное действие . Впрочем, фокусировка на элементе всё ещё возможна, если мы будем использовать другой способ. Например, нажатием клавиши Tab можно перейти от первого поля ввода ко второму. Но только не через клик мышью на элемент, это больше не работает.
Причина 1: Некорректный адрес
Если в MS Word ссылка не отображается синим цветом и не подчеркивается, а также не осуществляет переход в браузер, в первую очередь необходимо проверить правильность адреса. Структура адреса сайта состоит из нескольких частей, например, https://lumpics.ru/. Первый элемент (https/ http) – это протокол, может обозначаться по-другому: «ftp», «mailto», «file».
После протокола всегда идет двоеточие и двойной слэш, за которым прописывается префикс (необязательный параметр, «www.»), непосредственно адрес сайта, состоящий из имени и доменного сокращения, указывающего расположение или направленность сайта («.ru», «.com», «.org» и т.д.). Заканчивается ссылка слэшем (для перехода на главную страницу).
При ручном написании проверьте правильность расположения компонентов (двоеточие, точка, слэши, тире и нижнее подчеркивание) и поставьте после ссылки пробел. Обычно при корректном указании пробел «придает» набору символов привычный вид.
При копировании адреса и последующей вставки в документ не используйте функцию «Сохранить только текст». Для корректного отображения выберите «Сохранить исходное форматирование» или «Объединить форматирование».
Причина 2: Системная ошибка
Если ссылка прописана правильно и все равно не осуществляет переход в браузер при нажатом CTRL+щелчок мыши, при этом появляется окно с сообщением «Данная операция отменена в связи с ограничениями на оборудовании. Свяжитесь с системным администратором» или «Это действие запрещено политикой организации. Для получения дополнительных сведений обратитесь в службу поддержки.», это говорит о системном сбое. Вы можете устранить его, поочередно выполняя предложенные далее способы.
Способ 1: Назначение другого приложения браузером по умолчанию
Чаще всего указанные ошибки появляются, когда браузером по умолчанию является не Internet Explorer. Сбой в переопределении обязанностей вызван инсталляцией либо Google Chrome, либо Opera и назначением их браузером по умолчанию. Если удалить указанные веб-обозреватели, проблема может сохраниться. Для этого переопределяют обязанности на Mozilla Firefox.
На примере последнего и рассмотрим, как назначить браузером по умолчанию другую программу:
- Откройте веб-обозреватель, при первом запуске обычно появляется окно о необходимости назначить конкретный браузер программой по умолчанию.
Если этого не произошло, кликните три горизонтальные черты для вызова основного меню и щелкните на «Настройки».
Во вкладке «Основные» в категории «Запуск» есть кнопка «Установить по умолчанию», кликните на нее.
Пример, как это же сделать в Яндекс.браузере.
Способ 2: Файл .CMD
Указанные выше ошибки иногда появляются после удаления Гугл Хрома.
- В таком случае закройте все программы из пакета MS Office и запустите Internet Explorer. Когда веб-обозреватель откроется, нажмите на шестерёнку и перейдите в «Свойства обозревателя».
При появлении нового диалогового окна перейдите во вкладку «Программы» и нажмите на ссылку «Использовать браузер Internet Explorer по умолчанию», а после – на «ОК». Закройте IE.
Для устранения проблемы неоткрывающихся ссылок в Ворде запустите Блокнот («Пуск» – «Все программы» – «Стандартные» – «Блокнот»), скопируйте и вставьте приведенный ниже текст. Назовите файл MSO_Hyperliks.CMD и сохраните его на рабочий стол, после чего закройте Блокнот.
Сделайте копию реестра операционной системы, после чего запустите исполняемый файл от имени администратора. Для этого кликните правой кнопкой мыши по файлу и выберите соответствующий пункт. Когда появится сообщение о необходимости указать пароль администратора, сделайте это или кликните на «Продолжить». Редактор реестра выдаст уведомление, после чего вам остается нажать «Да».
Подробнее:
Способ 3: Редактор реестра
Указанный алгоритм сработает в отношении Гугл Хрома.
- Зайдите в «Редактор реестра»: воспользуйтесь клавишами Win+R, и когда появится диалоговое окно «Выполнить», пропишите команду и щелкните «ОК».
Подробнее: Способы запуска «Редактора реестра» в Windows 10
Раскройте категорию HKEY_CLASSES_ROOT и найдите папку «.html». При одиночном клике на указанный объект справа отображаются 3 файла, в числе которых есть файл «По умолчанию».
Дважды кликните по нему и в поле «Значение» пропишите и нажмите «ОК», закройте «Редактор реестра», перезапустите все приложения Microsoft Office и проверьте работоспособность ссылок.
Если главным браузером является Mozilla Firefox, тогда повторите пункты 1-3, но в поле «Значение» укажите . Так же закрываете «Редактор реестра», перезапускаете офисные программы и проверяете функционал.
Если ссылки не открываются ни в одном веб-обозревателе, тогда создайте в указанном ниже расположении реестра файл под названием «command».
Чтобы это сделать, перейдите по пути , убедитесь, что папки «command» в указанной директории не существует и создайте ее. Для этого однократно кликните на папку «open» и справа кликните правой кнопкой мыши, выберите «Создать» – «Раздел».
В левом столбце появится новая папка, ее название нужно изменить на и нажать Enter. Перезагрузите компьютер и проверьте работоспособность ссылок в Ворде.
Способ 4: Очистка компьютера специальными программами
Этот метод как последняя инстанция в решении появившихся проблем. Установите CCleaner и проведите чистку компьютера: накопителя, реестра, оперативной памяти и т.д.
Подробнее: Как пользоваться программой CCleaner
Также помощником в борьбе с временными файлами является Auslogics BoostSpeed. Его расширенная функциональность позволяет проводить генеральную «уборку» компьютера и ускорять его работоспособность.
Подробнее: Как удалить временные файлы в Windows 7
Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.