From 8cfa8e476a354a1e25cf4416822bf2c24e4747d9 Mon Sep 17 00:00:00 2001 From: Artem Buslov Date: Mon, 9 Jul 2018 23:50:20 +0300 Subject: [PATCH] Translate README_ru.md via GitLocalize (#210) --- README_ru.md | 202 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 156 insertions(+), 46 deletions(-) diff --git a/README_ru.md b/README_ru.md index f61e941..7b827fc 100644 --- a/README_ru.md +++ b/README_ru.md @@ -11,17 +11,21 @@ > В НАСА фиксируют все наши промахи, аварии и методы решения проблем с начала 1960 х гг., когда наземные группы проекта Mercury начали составлять сборник "выученных уроков". Теперь в этом сборнике перечислены тысячи сложных ситуаций и их решения – от отказа двигателей, поломки ручек люка до проблем с компьютером. -— Крис Хэдфилд, *Руководство астронавта по жизни на Земле* (перевод Дмитрия Лазарева). +— Крис Хэдфилд, *Руководство астронавта по жизни на Земле* (перевод Дмитрия Лазарева). #### Соглашения для этого документа Для наглядности во всех примерах в этом документе используется измененное приглашение командной строки, чтобы показать текущую ветку и есть ли подготовленные изменения. Ветка заключена в кавычки, а символ `*` после ветки означает подготовленные изменения. [![Заходите в чат https://gitter.im/k88hudson/git-flight-rules](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/k88hudson/git-flight-rules?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + -**Содержание** *generated with [DocToc](https://github.com/thlorenz/doctoc)* + + - [Репозитории](#%D0%A0%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B8) + - [Я хочу создать локальный репозиторий](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9) + - [Я хочу клонировать удаленный репозиторий](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D0%BA%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9) - [Редактирование коммитов](#%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D1%82%D0%BE%D0%B2) - [Что я только что сохранил?](#%D0%A7%D1%82%D0%BE-%D1%8F-%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D1%87%D1%82%D0%BE-%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB) - [Я неправильно написал сообщение коммита](#%D0%AF-%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BB-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D1%82%D0%B0) @@ -98,11 +102,14 @@ - [Я хочу переписать локальные файлы при выполнении git pull](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D0%BF%D0%B5%D1%80%D0%B5%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C-%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B-%D0%BF%D1%80%D0%B8-%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8-git-pull) - [Я хочу удалить файл из git, но оставить сам файл](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C-%D1%84%D0%B0%D0%B9%D0%BB-%D0%B8%D0%B7-git-%D0%BD%D0%BE-%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D1%81%D0%B0%D0%BC-%D1%84%D0%B0%D0%B9%D0%BB) - [Я хочу откатить файл до заданной ревизии](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D0%BE%D1%82%D0%BA%D0%B0%D1%82%D0%B8%D1%82%D1%8C-%D1%84%D0%B0%D0%B9%D0%BB-%D0%B4%D0%BE-%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%B9-%D1%80%D0%B5%D0%B2%D0%B8%D0%B7%D0%B8%D0%B8) + - [Я хочу получить список изменений в заданном файле из разных коммитов или веток](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9-%D0%B2-%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC-%D1%84%D0%B0%D0%B9%D0%BB%D0%B5-%D0%B8%D0%B7-%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D1%85-%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D1%82%D0%BE%D0%B2-%D0%B8%D0%BB%D0%B8-%D0%B2%D0%B5%D1%82%D0%BE%D0%BA) - [Конфигурация](#%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F) - [Я хочу добавить псевдонимы для некоторых команд Git](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%BF%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D0%BD%D0%B8%D0%BC%D1%8B-%D0%B4%D0%BB%D1%8F-%D0%BD%D0%B5%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D1%85-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4-git) - [Я хочу добавить в свой репозиторий пустую папку](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%B2-%D1%81%D0%B2%D0%BE%D0%B9-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9-%D0%BF%D1%83%D1%81%D1%82%D1%83%D1%8E-%D0%BF%D0%B0%D0%BF%D0%BA%D1%83) - [Я хочу сохранить имя пользователя и пароль для репозитория](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C-%D0%B8%D0%BC%D1%8F-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F-%D0%B8-%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C-%D0%B4%D0%BB%D1%8F-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F) - [Я хочу, чтобы Git игнорировал изменения разрешений и прав файлов](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D1%87%D1%82%D0%BE%D0%B1%D1%8B-git-%D0%B8%D0%B3%D0%BD%D0%BE%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BB-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B9-%D0%B8-%D0%BF%D1%80%D0%B0%D0%B2-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2) + - [Я хочу задать данные пользователя в глобальных настройках](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F-%D0%B2-%D0%B3%D0%BB%D0%BE%D0%B1%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%D1%85) + - [Я хочу настроить цветовую схему для командной строки Git](#%D0%AF-%D1%85%D0%BE%D1%87%D1%83-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%B2%D1%83%D1%8E-%D1%81%D1%85%D0%B5%D0%BC%D1%83-%D0%B4%D0%BB%D1%8F-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8-git) - [Я не представляю что я сделал неправильно](#%D0%AF-%D0%BD%D0%B5-%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E-%D1%87%D1%82%D0%BE-%D1%8F-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D0%BB-%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE) - [Другие ресурсы](#%D0%94%D1%80%D1%83%D0%B3%D0%B8%D0%B5-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B) - [Книги](#%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8) @@ -112,9 +119,36 @@ +## Репозитории + +### Я хочу создать локальный репозиторий + +Чтобы создать репозиторий Git в текущей папке: + +```sh +(my-folder) $ git init +``` + +### Я хочу клонировать удаленный репозиторий + +Чтобы клонировать (копировать) удаленный репозиторий, скопируйте адрес репозиторий и запустите: + +```sh +$ git clone [url] +``` + +Git сохранит копию в папке с названием репозитория. Убедитесь, что у Вас есть соединение с удаленным сервером, откуда Вы клонируете (в большинстве случаев это означает наличие выхода в Интернет). + +Чтобы клонировать в папку с произвольным именем: + +```sh +$ git clone [url] name-of-new-folder +``` + ## Редактирование коммитов + ### Что я только что сохранил? Допустим, Вы не глядя сохранили изменения с помощью `git commit -a` и теперь не уверены что именно сохранили. В таком случае Вы можете просмотреть последний коммит в HEAD с помощью: @@ -152,6 +186,7 @@ $ git commit --amend -m 'xxxxxxx' Если Вы уже сделали `push`, то Вы по-прежнему можете исправить коммит, но после этого придется делать `push` с принудительной перезаписью, что не рекомендуется. + ### Я сделал коммит с неправильным именем автора и адресом электронной почты Если это один коммит, то исправьте его с помощью `amend` @@ -188,6 +223,7 @@ $ git commit --amend --no-edit Это особенно полезно, когда у Вас открытый патч, а Вы сохранили ненужный файл и теперь нужно сделать принудительный `push` для обновления патча в удаленном репозитории. Опция `--no-edit` оставляет прежнее сообщение коммита без изменений. + ### Я хочу удалить последний коммит Если хотите удалить опубликованные коммиты, воспользуйтесь приведенным ниже приемом. Однако, это бесповоротно изменит у Вас историю Git, а также испортит историю Git у любого, что уже стянул (pull) изменения из репозитория. Короче говоря, никогда так не делайте, если не уверены. @@ -207,6 +243,7 @@ $ git push --force-with-lease [remote] [branch] Это работает, если Вы еще не сделали `push`. Если Вы уже сделали `push`, то единственный по-настоящему безопасный способ это `git revert SHAofBadCommit`. Это создаст новый коммит, который отменит все изменения предыдущего коммита. Или, если ветка, в которую вы делаете `push` безопасна для перезаписи (т.е. не предполагается, другие разработчики будут стягивать из нее изменения), то просто используйте `git push --force-with-lease`. Подробнее см. [в этом пункте выше](#delete-pushed-commit). + ### Удалить произвольный коммит Здесь уместны те же предупреждения, что и в пункте выше. По возможности, никогда так не делайте. @@ -219,6 +256,7 @@ $ git push --force-with-lease [remote] [branch] Или сделайте [интерактивное перебазирование](#interactive-rebase) и удалите строки ненужных коммитов. + ### Я пытаюсь опубликовать исправленный коммит, но получаю сообщение об ошибке ```sh @@ -231,7 +269,7 @@ hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. ``` -Напомним, что подобно перебазированию (см. ниже), исправление коммита (amend) **заменяет старый коммит новым**, поэтому Вы должны делать принудительный `push` (`--force-with-lease`) Ваших изменений, если хотите заменить уже опубликованные на удаленном репозитории коммиты. Будьте осторожны, когда так делаете – *всегда* проверяйте с какой веткой Вы проводите эти действия! +Напомним, что подобно перебазированию (см. ниже), исправление коммита (amend) **заменяет старый коммит новым**, поэтому Вы должны делать принудительный `push` (`--force-with-lease`) Ваших изменений, если хотите заменить уже опубликованные на удаленном репозитории коммиты. Будьте осторожны, когда так делаете – *всегда* проверяйте с какой веткой Вы проводите эти действия! ```sh (my-branch)$ git push origin mybranch --force-with-lease @@ -242,11 +280,12 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details. Если Вы *абсолютно* уверены, что никто кроме Вас не работает с данной веткой или Вы хотите обновить вершину ветви в любом случае, то используйте `--force` (`-f`), но вообще этого следует избегать. + ### Я случайно сделал жесткий сброс (--hard) и теперь хочу вернуть свои изменения Если Вы случайно сделали `git reset --hard`, то вы можете вернуть назад коммиты, т.к. Git несколько дней хранит все действия в журнале. -Замечание: Это относится только если ваша работа была сохранена, т.е. Вы сделали коммит или stash. `git reset --hard` _удалит_ несохраненные изменения, так что пользуйтесь им с осторожностью. (Безопасная опция это `git reset --keep`.) +Замечание: Это относится только если ваша работа была сохранена, т.е. Вы сделали коммит или stash. `git reset --hard` *удалит* несохраненные изменения, так что пользуйтесь им с осторожностью. (Безопасная опция это `git reset --keep`.) ```sh (master)$ git reflog @@ -263,6 +302,7 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details. ## Подготовка изменений (staging) + ### Мне нужно добавить подготовленные изменения в предыдущий коммит ```sh @@ -271,6 +311,7 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details. ``` + ### Я хочу подготовить только часть файла, а не весь файл целиком Обычно, если хотите подготовить часть файл, Вы запускаете: @@ -289,11 +330,13 @@ $ git add -N filename.x `git diff --staged`, Вы увидите какие строки вы подготовили по-сравнению с тем, что сохранено в рабочей копии. + ### Я хочу добавить изменения одного файла в два разных коммита `git add` добавляет в коммит весь файл целиком. `git add -p` позволяет интерактивно выбрать изменения, которые Вы хотите добавить. + ### Я хочу подготовить свои неподготовленные правки и убрать из подготовки то, что уже подготовлено Это сложно. Лучшее, что я смог придумать это отложить (stash) неподготовленные изменения. Затем сделать сброс. После этого вернуть отложенные изменения и добавить их. @@ -308,6 +351,7 @@ $ git add -A ## Неподготовленные правки + ### Я хочу переместить мои неподготовленные правки в новую ветку ```sh @@ -315,6 +359,7 @@ $ git checkout -b my-branch ``` + ### Я хочу переместить неподготовленные правки в другую существующую ветку ```sh @@ -324,6 +369,7 @@ $ git stash pop ``` + ### Я хочу отменить мои локальные несохраненные изменения (подготовленные и неподготовленные) Если Вы хотите отменить все подготовленные и неподготовленные изменения, то можете сделать так: @@ -417,6 +463,7 @@ $ git checkout . ``` + ### Я хочу удалить все неотслеживаемые файлы Когда Вы хотите удалить все неотслеживаемые файлы @@ -448,12 +495,15 @@ $ git branch -a ``` + ### Создать ветку на определенном коммите + ```sh $ git checkout -b ``` + ### Я стянул изменения (pull) из неправильной ветки или в неправильную ветку Это очередная возможность воспользоваться `git reflog`, чтобы посмотреть куда указывала ваша HEAD перед неправильным pull. @@ -473,6 +523,7 @@ $ git reset --hard c5bc55a Готово. + ### Я хочу отменить локальные коммиты, чтобы моя ветка стала такой же как на сервере Подтвердите, что не хотите отправлять изменения на сервер. @@ -494,6 +545,7 @@ $ git reset --hard c5bc55a ``` + ### Я сохранил коммит в ветку master вместо новой ветки Создайте новую ветку, оставаясь на master: @@ -528,6 +580,7 @@ HEAD is now at a13b85e ``` + ### Я хочу сохранить файл целиком из другого ref-ish Скажем, у Вас рабочий spike (см. заметку) на сотни изменений. Всё работает. Теперь Вы сохраняете эту работу в другую ветку: @@ -540,8 +593,8 @@ HEAD is now at a13b85e Скажем, Вы имеете: - * ветку `solution` с решением к Вашему spike. На один коммит впереди `develop`. - * ветку `develop`, куда Вы хотите добавить Ваши изменения. +- ветку `solution` с решением к Вашему spike. На один коммит впереди `develop`. +- ветку `develop`, куда Вы хотите добавить Ваши изменения. Вы можете выполнить это, перенеся содержимое файла в Вашу ветку: @@ -565,6 +618,7 @@ HEAD is now at a13b85e Заметка: Spike-решения делаются для анализа или решения проблемы. Эти решения используют, чтобы оценить проблему, и отбрасывают сразу же, как только все получают ясное представление о проблеме. ~ [Wikipedia](https://en.wikipedia.org/wiki/Extreme_programming_practices). + ### Я сделал несколько коммитов в одной ветке, а нужно было сохранять их в разных ветках Скажем, Вы в ветке master. Запустив `git log`, Вы увидите, что сделали два коммита: @@ -630,7 +684,9 @@ HEAD is now at a13b85e ``` + ### Я хочу удалить локальные ветки, которые были удалены в upstream + Как только Вы слили пулл-реквест на GitHub, Вам предлагают удалить слитую ветку из Вашего форка. Если Вы не планируете продолжать работу в этой ветке, то для поддержания рабочей копии в чистоте Вы можете удалить локальные копии ненужных веток, чтобы не путаться в них. ```sh @@ -639,7 +695,8 @@ $ git fetch -p upstream где `upstream` - удаленная ветка, из которой Вы хотите получить изменения. - + + ### Я нечаянно удалил мою ветку Если Вы регулярно отправляете изменения в удаленное хранилище, большую часть времени Вы в безопасности. Но в один прекрасный момент Вы всё же можете случайно удалить Ваши ветки. Скажем, мы создали ветку и создали новый файл: @@ -758,6 +815,7 @@ README.md foo.txt ``` + ### Я хочу перейти на удаленную ветку, над которой работает кто-то еще Во-первых, получим все ветки из удаленного репозитория: @@ -781,13 +839,13 @@ Switched to a new branch 'daves' ### Я хочу создать новую удаленную ветку из текущей локальной ```sh -$ git push +$ git push HEAD ``` Если Вы хотите, чтобы текущая локальная ветка отслеживала соответствующую удаленную (upstream) ветку, тогда выполните следующее: ```sh -$ git push -u +$ git push -u HEAD ``` В режиме `upstream` или в режиме `simple` (по-умолчанию в Git 2.0) параметра `push.default`, следующая команда отправит текущую ветку в удаленную ветку, которая была ранее зарегистрирована с помощью -u : @@ -815,6 +873,7 @@ $ git branch -u [remotename]/[branch] [local-branch] ``` + ### Я хочу настроить HEAD на отслеживание основной удаленной ветки При просмотре удаленных веток можно увидеть какую удаленную ветку отслеживает HEAD. Может оказаться, что это не та ветка что нужно. @@ -845,6 +904,7 @@ origin/HEAD set to master ## Перебазирование (rebase) и слияние (merge) + ### Я хочу отменить перебазирование/слияние Вы можете слить/перебазировать Вашу ветку с неправильной веткой. А также бывают случаи, когда Вы не можете предугадать успешно ли завершится процесс перебазирования/слияния. Git сохраняет исходный указатель HEAD в переменную ORIG_HEAD перед тем как приступить к опасным операциям, так что вернуть ветку на состояние до перебазирования/слияния просто. @@ -854,6 +914,7 @@ origin/HEAD set to master ``` + ### Я сделал перебазирование, но я не хочу делать принудительный push К сожалению, вы должны сделать принудительный push, если хотите, чтобы изменения были отражены на удаленной ветке. Это потому что у вас изменена история. Удаленная ветка не примет изменения, если не сделать принудительный push. Это одна из основных причин, по которым большинство людей основывает свой рабочий процесс на слиянии вместо перебазирования - большие команды могут столкнуться с проблемами, если разработчики будут делать принудительный `push`. Используйте это с осторожностью. Безопасный способ использовать перебазирование - это не отражать Ваши изменения напрямую на удаленную ветку, а вместо этого делать следующее: @@ -868,6 +929,7 @@ origin/HEAD set to master Чтобы узнать больше, см. [эту SO ветку](https://stackoverflow.com/questions/11058312/how-can-i-use-git-rebase-without-requiring-a-forced-push). + ### Я хочу объединить коммиты Предположим, что Вы работаете в ветке, которая стала или станет пулл-реквестом в `master`. В простейшем случае когда всё, что Вы хотите сделать - это объединить *все* коммиты в один единственный коммит и Вам не важны временные метки, Вы можете сделать сброс и заново сделать коммит. Убедитесь, что ветка master обновлена и Ваши изменения сохранены, затем: @@ -961,6 +1023,7 @@ Newer, awesomer features ``` #### Безопасная стратегия слияния + `--no-commit` производит слияние, но не делает коммит результата, давая пользователю возможность проверить и доработать результат слияния перед коммитом. `no-ff` сохраняет доказательства того, что когда-то существовала ветка feature, сохраняя цельность истории проекта. ```sh @@ -974,6 +1037,7 @@ Newer, awesomer features ``` + #### Я хочу объединить только неопубликованные коммиты Иногда у Вас бывает несколько временных коммитов, которые Вы хотите объединить перед публикацией в upstream. Вы не хотите ненароком объединить свои коммиты с уже опубликованными, потому что кто-то уже мог работать с ними. @@ -1011,19 +1075,22 @@ Newer, awesomer features ### Возможные проблемы интерактивного перебазирования + #### Экран перебазирования говорит 'noop' Если Вы видите это: + ``` noop ``` Это значит, что Вы пытаетесь сделать перебазирование в ветку, которая уже имеет идентичный коммит или она *впереди* текущей ветки. Вы может попробовать: -* удостовериться что Ваша ветка master находится там, где она должна быть -* вместо этого перебазировать `HEAD~2` или что-то более раннее +- удостовериться что Ваша ветка master находится там, где она должна быть +- вместо этого перебазировать `HEAD~2` или что-то более раннее + #### Здесь были конфликты Если Вам не удается успешно завершить перебазирование, то, возможно, Вам придется разрешать конфликты. @@ -1083,6 +1150,7 @@ Changes not staged for commit: ``` + ## Отложенные изменения (stash) ### Отложить все правки @@ -1114,6 +1182,7 @@ $ git stash push working-directory-path/filename1.ext working-directory-path/fil ``` + ### Отложить с сообщением ```sh @@ -1121,6 +1190,7 @@ $ git stash save ``` + ### Применить заданный stash из списка Во-первых, проверьте список отложенных изменений, используя @@ -1149,13 +1219,14 @@ $ git log -S "string to find" Общие параметры: -* `--source` показывает ссылки, от которых можно добраться до каждого коммита. +- `--source` показывает ссылки, от которых можно добраться до каждого коммита. -* `--all` ищет во всех ветках. +- `--all` ищет во всех ветках. -* `--reverse` выводит коммиты в обратном порядке, это значит, что вверху будет первый коммит, в котором сделано это изменение. +- `--reverse` выводит коммиты в обратном порядке, это значит, что вверху будет первый коммит, в котором сделано это изменение. + ### Я хочу искать по автору или сохранившему изменения (committer) Найти все коммиты по автору или сохранившему изменения: @@ -1181,7 +1252,7 @@ $ git log -- $ git log -- **/*.js ``` -При использовании подстановочных знаков используйте `--name-status` для просмотра списка сохраненных файлов, сохраненных в каждом коммите: +При использовании подстановочных знаков используйте `--name-status` для просмотра списка файлов, сохраненных в каждом коммите: ```sh $ git log --name-status -- **/*.js @@ -1198,6 +1269,7 @@ $ git tag --contains ## Субмодули + ### Клонировать все субмодули ```sh @@ -1211,6 +1283,7 @@ $ git submodule update --init --recursive ``` + ### Удалить субмодуль Создание субмодуля довольно прямолинейно, чего не скажешь об удалении. Команды, которые Вам нужны: @@ -1246,6 +1319,7 @@ $ git push :refs/tags/ ``` + ### Восстановить удаленную метку Если хотите восстановить метку, которая была удалена, Вы можете сделать следующее: во-первых, Вам нужно найти недостижимую метку: @@ -1281,6 +1355,7 @@ $ git archive --format zip --output /full/path/to/zipfile.zip master ## Отслеживание файлов + ### Я хочу изменить регистр в имени файла, не меняя содержимое файла ```sh @@ -1295,6 +1370,7 @@ $ git archive --format zip --output /full/path/to/zipfile.zip master ``` + ### Я хочу удалить файл из git, но оставить сам файл ```sh @@ -1315,12 +1391,25 @@ $ git archive --format zip --output /full/path/to/zipfile.zip master (master)$ git checkout c5f567~1 -- file1/to/restore file2/to/restore ``` +### Я хочу получить список изменений в заданном файле из разных коммитов или веток + +Полагая, что Вы хотите сравнить последний коммит с файлом из коммита c5f567: + +```sh +$ git diff HEAD:path_to_file/file c5f567:path_to_file/file +``` + +Аналогично для веток: + +```sh +$ git diff master:path_to_file/file staging:path_to_file/file +``` + ## Конфигурация - ### Я хочу добавить псевдонимы для некоторых команд Git -В OS X и Linux Ваш файл конфигурации Git хранится в ```~/.gitconfig```. В качестве примера я добавил некоторые псевдонимы, которые сам использую для краткости (а также некоторые из моих типичных опечаток), в раздел ```[alias]``` как показано ниже: +В OS X и Linux Ваш файл конфигурации Git хранится в `~/.gitconfig`. В качестве примера я добавил некоторые псевдонимы, которые сам использую для краткости (а также некоторые из моих типичных опечаток), в раздел `[alias]` как показано ниже: ```vim [alias] @@ -1345,7 +1434,6 @@ $ git archive --format zip --output /full/path/to/zipfile.zip master zap = fetch -p ``` - ### Я хочу добавить в свой репозиторий пустую папку Вы не можете этого сделать! Git просто не поддерживает этого, но есть уловка. Вы можете создать файл .gitignore в папке со следующим содержанием: @@ -1364,9 +1452,8 @@ $ mkdir mydir $ touch mydir/.gitkeep ``` -Вы можете назвать его просто .keep , в этом случае вторая строка выше будет ```touch mydir/.keep``` +Вы можете назвать его просто .keep , в этом случае вторая строка выше будет `touch mydir/.keep` - ### Я хочу сохранить имя пользователя и пароль для репозитория У Вас может быть репозиторий, требующий авторизации. В этом случае вы можете сохранить на время имя пользователя и пароль, и Вам не потребуется вводить их при каждом вызове push / pull. Помощник по учетным записям сделает это за Вас. @@ -1393,6 +1480,28 @@ $ git config core.fileMode false $ git config --global core.fileMode false ``` +### Я хочу задать данные пользователя в глобальных настройках + +Чтобы настроить информацию о пользователе, используемую во всех локальных репозиториях, в частности имя, отображаемое в истории изменений: + +```sh +$ git config --global user.name “[firstname lastname]” +``` + +Чтобы настроить адрес электронной почты, который будет связан с каждой записью в историю: + +```sh +git config --global user.email “[valid-email]” +``` + +### Я хочу настроить цветовую схему для командной строки Git + +Для наглядности можно настроить автоматическую цветовую схему командной строки Git: + +```sh +$ git config --global color.ui auto +``` + ## Я не представляю что я сделал неправильно Итак, Вы в затруднении - Вы сбросили что-то или Вы слили неправильную ветку, или Вы отправили изменения с принудительной перезаписью и теперь Вы не можете найти свои коммиты. Вы знаете, что в какой-то момент было всё в порядке и Вы хотите вернуться к этому состоянию. @@ -1422,37 +1531,38 @@ $ git reset --hard 0254ea7 ## Книги -* [Pro Git](https://git-scm.com/book/en/v2) - великолепная книга Скотта Чакона и Бена Страуба про Git -* [Git Internals](https://github.com/pluralsight/git-internals-pdf) - еще одна великолепная книга Скотта Чакона, посвященная Git +- [Pro Git](https://git-scm.com/book/en/v2) - великолепная книга Скотта Чакона и Бена Страуба про Git +- [Git Internals](https://github.com/pluralsight/git-internals-pdf) - еще одна великолепная книга Скотта Чакона, посвященная Git ## Учебники -* [Atlassian's Git tutorial](https://www.atlassian.com/git/tutorials) Получите Git сразу с учебниками от начального до продвинутого уровня. -* [Изучаем ветвление в Git](https://learngitbranching.js.org/) Интерактивный веб-учебник по ветвлению/слиянию/перебазированию -* [Getting solid at Git rebase vs. merge](https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa) -* [git-workflow](https://github.com/asmeurer/git-workflow) - Руководство от [Aaron Meurer](https://github.com/asmeurer) по использованию Git в совместной разработке проектов с открытым исходным кодом -* [GitHub как рабочий процесс](https://hugogiraudel.com/2015/08/13/github-as-a-workflow/) - Интересный подход к использованию GitHub в качестве рабочего процесса, в частности с пустыми пулл-реквестами -* [Githug](https://github.com/Gazler/githug) - Игра для изучения более общих рабочих процессов Git +- [Atlassian's Git tutorial](https://www.atlassian.com/git/tutorials) Получите Git сразу с учебниками от начального до продвинутого уровня. +- [Изучаем ветвление в Git](https://learngitbranching.js.org/) Интерактивный веб-учебник по ветвлению/слиянию/перебазированию +- [Getting solid at Git rebase vs. merge](https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa) +- [git-workflow](https://github.com/asmeurer/git-workflow) - Руководство от [Aaron Meurer](https://github.com/asmeurer) по использованию Git в совместной разработке проектов с открытым исходным кодом +- [GitHub как рабочий процесс](https://hugogiraudel.com/2015/08/13/github-as-a-workflow/) - Интересный подход к использованию GitHub в качестве рабочего процесса, в частности с пустыми пулл-реквестами +- [Githug](https://github.com/Gazler/githug) - Игра для изучения более общих рабочих процессов Git ## Скрипты и инструменты -* [firstaidgit.io](http://firstaidgit.io/) Выборка наиболее частых вопросов и ответов по Git c поиском -* [git-extra-commands](https://github.com/unixorn/git-extra-commands) - сборник полезных дополнительных скриптов для Git -* [git-extras](https://github.com/tj/git-extras) - GIT utilities -- статистика репозитория, REPL, генерация журнала изменений, статистика по авторам изменений и многое другое -* [git-fire](https://github.com/qw3rtman/git-fire) - git-fire - это плагин для Git, который предупреждает при потенциально опасных действиях, таких как: добавление всех файлов из текущей папки, создание коммита и публикация измений в новую ветку (для предотвращения конфликтов при слиянии). -* [git-tips](https://github.com/git-tips/tips) - Краткие советы по Git -* [git-town](https://github.com/Originate/git-town) - Общая высокоуровневая поддержка рабочего процесса Git! http://www.git-town.com +- [firstaidgit.io](http://firstaidgit.io/) Выборка наиболее частых вопросов и ответов по Git c поиском +- [git-extra-commands](https://github.com/unixorn/git-extra-commands) - сборник полезных дополнительных скриптов для Git +- [git-extras](https://github.com/tj/git-extras) - GIT utilities -- статистика репозитория, REPL, генерация журнала изменений, статистика по авторам изменений и многое другое +- [git-fire](https://github.com/qw3rtman/git-fire) - git-fire - это плагин для Git, который предупреждает при потенциально опасных действиях, таких как: добавление всех файлов из текущей папки, создание коммита и публикация измений в новую ветку (для предотвращения конфликтов при слиянии). +- [git-tips](https://github.com/git-tips/tips) - Краткие советы по Git +- [git-town](https://github.com/Originate/git-town) - Общая высокоуровневая поддержка рабочего процесса Git! http://www.git-town.com ## Графические клиенты -* [GitKraken](https://www.gitkraken.com/) - роскошный Git-клиент для Windows, Mac и Linux -* [git-cola](https://git-cola.github.io/) - еще один Git-клиент для Windows и OS X -* [GitUp](https://github.com/git-up/GitUp) - новый графический клиент, имеющий весьма своеобразные методы работы со сложностями Git -* [gitx-dev](https://rowanj.github.io/gitx/) - еще один графический Git-клиент для OS X -* [Sourcetree](https://www.sourcetreeapp.com/) - Простота и мощь в красивом и свободном графическом Git-клиенте. Для Windows и Mac. -* [Tower](https://www.git-tower.com/) - графический Git-клиент для OS X (платный) -* [tig](https://jonas.github.io/tig/) - консольный текстовый интерфейс для Git -* [Magit](https://magit.vc/) - интерфейс для Git, реализованный в виде модуля Emacs. -* [GitExtensions](https://github.com/gitextensions/gitextensions) - расширение оболочки, плагин для Visual Studio 2010-2015 и автономный инструмент для управления репозиториями Git. -* [Fork](https://git-fork.com/) - быстрый и дружелюбный Git-клиент для Mac (бета) -* [gmaster](https://gmaster.io/) - Git-клиент для Windows с трехсторонним слиянием, обнаружением рефакторинга, семантическим сравнением и слиянием (бета) -* [gitk](https://git-scm.com/docs/gitk) - Git-клиент под Linux для просмотра состояния репозитория. + +- [GitKraken](https://www.gitkraken.com/) - роскошный Git-клиент для Windows, Mac и Linux +- [git-cola](https://git-cola.github.io/) - еще один Git-клиент для Windows и OS X +- [GitUp](https://github.com/git-up/GitUp) - новый графический клиент, имеющий весьма своеобразные методы работы со сложностями Git +- [gitx-dev](https://rowanj.github.io/gitx/) - еще один графический Git-клиент для OS X +- [Sourcetree](https://www.sourcetreeapp.com/) - Простота и мощь в красивом и свободном графическом Git-клиенте. Для Windows и Mac. +- [Tower](https://www.git-tower.com/) - графический Git-клиент для OS X (платный) +- [tig](https://jonas.github.io/tig/) - консольный текстовый интерфейс для Git +- [Magit](https://magit.vc/) - интерфейс для Git, реализованный в виде модуля Emacs. +- [GitExtensions](https://github.com/gitextensions/gitextensions) - расширение оболочки, плагин для Visual Studio 2010-2015 и автономный инструмент для управления репозиториями Git. +- [Fork](https://git-fork.com/) - быстрый и дружелюбный Git-клиент для Mac (бета) +- [gmaster](https://gmaster.io/) - Git-клиент для Windows с трехсторонним слиянием, обнаружением рефакторинга, семантическим сравнением и слиянием (бета) +- [gitk](https://git-scm.com/docs/gitk) - Git-клиент под Linux для просмотра состояния репозитория.