Адреса репозиториев:
Изменение адреса репозитория:
Основы ветвления и слияния
Создание ветки:
git branch <имя_ветки>
git checkout <имя_ветки>
или кратко с ключом -b
git checkout -b <имя_ветки>
Переключение на ветку:
git checkout <имя_ветки>
Просмотр списка веток:
git branch
Слияние:
ВАЖНО!!! Перед слиянием надо переключится туда куда надо слить данные
git checkout <имя_ветки_назначения>
git merge <имя_ветки>
Удаление ветки:
git branch -d <имя_ветки>
Переименование ветки
Сначала переименовываем локальную ветку, а затем выгружаем изменения на удаленный сервер, удаляем старую ветку на сервере.
git branch -m <старое_название> <новое_название>
git push <имя_репозитория> :<старое_название> <новое_название>
ВАЖНО!!! Во второй строчке стоит двоеточие перед старым именем ветки — это команда для удаления ветки на сервере!!!
Добавить в
git add <имя|маска> // git add . -Добавит все отслеживаемые файлы
Создать коммит
git commit -m "<текст_комментария>"
Изменение последнего коммита
ВАЖНО! Коммит не должен быть запушен на удаленный репо (если нет, то ничего не сломается, но гемор потом будет)
git --amend -m "<текст_комментария>"
Записать в репозиторий (в основную ветку)
git push
Записать в репозиторий в ветку
git push <имя_репозитория> <имя_ветки> // git push origin dev
Для отмены последнего коммита, если изменения ещё не опубликованы на сервер (не сделан git push) воспользоваться командой:
При этом изменённый код удалён не будет (будет зелёным цветом в git status). Вы можете подправить код и повторить коммит.
Это работает, если вы не опубликовали свои изменения. Если же вы уже опубликовали изменения, то не остается ничего другого, как сделать коммит, который отменяет коммит.
Пример:
--soft - отменит коммит, но сохранит изменения в файлах
--hard - отменит коммит и удалит изменения, сделанные коммитом.
git reset --soft HEAD~2 - отменит 2 последних коммита, сохранив изменения. Будут видны в git status.
Для отмены опубликованного коммита:
Хеш смотрим в git log.
Отменить отслеживание файла:
Важно! Это так же поможет если надо убрать файл из индекса.
Отменить отслеживание папки:
Ситуация: вы удалили файл и хотите его восстановить или сделали изменения в файле, которые хотите отменить. То есть необходимо вернуть файл в то состояние, в котором он находится в Git репозитории.
Если вы еще не добавили файл в индекс (не выполнили git add), то для восстановления файла можно воспользоваться командой (вместо myfile необходимо указать файл, который вы восстанавливаете):
Просмотреть список удаленных файлов можно командой: git ls-files --deleted
Если вы удалили файл и уже добавили его в индекс, выполнив git add, то сначала нужно удалить его из индекса, а затем выполнить восстановление, как было показано выше. Для этого выполните команды:
git reset -- myfile
git checkout -- myfile
Документация Git - это хорошо,но чтобы найти решение, тебе заранее надо знать название фишки, которая вернёт всё на место.
git reflog
# вы увидите список всего,
# что сделали в git, во всех ветках!
# у каждого элемента есть индекс HEAD@{индекс}
# найдите тот, перед которым всё сломалось
git reset HEAD@{index}
# волшебная машина времени
# сделайте своё изменение
git add . # или добавьте файлы по отдельности
git commit --amend --no-edit
# теперь ваш последний коммит содержит это изменение!
# ПРЕДУПРЕЖДЕНИЕ: никогда не меняйте опубликованные коммиты!
Предупреждение: никогда не изменяйте коммиты, отправленные в публичную ветку! Изменяйте только коммиты в вашей локальной ветке, иначе Вам не поздоровится.
git commit --amend
# открывает редактор для смены сообщения
# создаст новую ветку из текущего состояния мастера
git branch какое-то-имя-новой-ветки
# удалит последний коммит из мастера
git reset HEAD~ --hard
git checkout какое-то-имя-новой-ветки
# ваш коммит теперь живёт в этой ветке :)
git reset HEAD@{количество-коммитов-назад} вместо HEAD~.
# отменяет последний коммит, но оставляет изменения доступными
git reset HEAD~ --soft
git stash
# переключиться на нужную ветку
git checkout имя-нужной-ветки
git stash pop
git add . # или добавьте отдельные файлы
git commit -m "ваше сообщение здесь"
# теперь ваши изменения на нужной ветке
git checkout имя-нужной-ветки
# скопировать последний коммит из мастера
git cherry-pick master
# удалить из мастера
git checkout master
git reset HEAD~ --hard
git diff --staged
# найдите коммит, который нужно отменить
git log
# используйте стрелочки, чтобы прокрутить историю
# сохраните хеш нужного коммита
git revert [сохранённый хеш]
# git создаст новый коммит, отменяющий выбранный
# отредактируйте сообщений коммита
# или просто сохраните
# найти хеш коммита, до которого нужно откатиться
git log
# используйте стрелочки, чтобы прокрутить историю
# сохраните хеш нужного коммита
git checkout [сохранённый хеш] -- путь/к/файлу
# старая версия файла окажется в вашем индексе
git commit -m "Ого, теперь не придётся копипастить, чтобы отменить изменения!"
cd ..
sudo rm -r чёртов-репозиторий-git
git clone https://some.github.url/чёртов-репозиторий-git.git
cd чёртов-репозиторий-git
# получить последнее состояние origin
git fetch origin
git checkout master
git reset --hard origin/master
# удалить неиндексированные файлы
git clean -d --force
# повторить checkout/reset/clean для каждой испорченной ветки