1
0
mirror of https://github.com/k88hudson/git-flight-rules.git synced 2025-03-10 12:48:43 -03:00

Translate README_ru.md via GitLocalize (#210)

This commit is contained in:
Artem Buslov 2018-07-09 23:50:20 +03:00 committed by Richard Littauer
parent df439158b4
commit 8cfa8e476a

View File

@ -11,17 +11,21 @@
> В НАСА фиксируют все наши промахи, аварии и методы решения проблем с начала 1960 х гг., когда наземные группы проекта Mercury начали составлять сборник "выученных уроков". Теперь в этом сборнике перечислены тысячи сложных ситуаций и их решения от отказа двигателей, поломки ручек люка до проблем с компьютером. > В НАСА фиксируют все наши промахи, аварии и методы решения проблем с начала 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) [![Заходите в чат 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)
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Содержание** *generated with [DocToc](https://github.com/thlorenz/doctoc)* <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [Репозитории](#%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%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%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) - [Я неправильно написал сообщение коммита](#%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 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) - [Я хочу удалить файл из 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%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) - [Конфигурация](#%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) - [Я хочу добавить псевдонимы для некоторых команд 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-%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) - [Я хочу сохранить имя пользователя и пароль для репозитория](#%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) - [Я хочу, чтобы 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%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%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) - [Книги](#%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8)
@ -112,9 +119,36 @@
<!-- END doctoc generated TOC please keep comment here to allow auto update --> <!-- END doctoc generated TOC please keep comment here to allow auto update -->
## Репозитории
### Я хочу создать локальный репозиторий
Чтобы создать репозиторий Git в текущей папке:
```sh
(my-folder) $ git init
```
### Я хочу клонировать удаленный репозиторий
Чтобы клонировать (копировать) удаленный репозиторий, скопируйте адрес репозиторий и запустите:
```sh
$ git clone [url]
```
Git сохранит копию в папке с названием репозитория. Убедитесь, что у Вас есть соединение с удаленным сервером, откуда Вы клонируете (в большинстве случаев это означает наличие выхода в Интернет).
Чтобы клонировать в папку с произвольным именем:
```sh
$ git clone [url] name-of-new-folder
```
## Редактирование коммитов ## Редактирование коммитов
<a name="diff-last"></a> <a name="diff-last"></a>
### Что я только что сохранил? ### Что я только что сохранил?
Допустим, Вы не глядя сохранили изменения с помощью `git commit -a` и теперь не уверены что именно сохранили. В таком случае Вы можете просмотреть последний коммит в HEAD с помощью: Допустим, Вы не глядя сохранили изменения с помощью `git commit -a` и теперь не уверены что именно сохранили. В таком случае Вы можете просмотреть последний коммит в HEAD с помощью:
@ -152,6 +186,7 @@ $ git commit --amend -m 'xxxxxxx'
Если Вы уже сделали `push`, то Вы по-прежнему можете исправить коммит, но после этого придется делать `push` с принудительной перезаписью, что не рекомендуется. Если Вы уже сделали `push`, то Вы по-прежнему можете исправить коммит, но после этого придется делать `push` с принудительной перезаписью, что не рекомендуется.
<a name="commit-wrong-author"></a> <a name="commit-wrong-author"></a>
### Я сделал коммит с неправильным именем автора и адресом электронной почты ### Я сделал коммит с неправильным именем автора и адресом электронной почты
Если это один коммит, то исправьте его с помощью `amend` Если это один коммит, то исправьте его с помощью `amend`
@ -188,6 +223,7 @@ $ git commit --amend --no-edit
Это особенно полезно, когда у Вас открытый патч, а Вы сохранили ненужный файл и теперь нужно сделать принудительный `push` для обновления патча в удаленном репозитории. Опция `--no-edit` оставляет прежнее сообщение коммита без изменений. Это особенно полезно, когда у Вас открытый патч, а Вы сохранили ненужный файл и теперь нужно сделать принудительный `push` для обновления патча в удаленном репозитории. Опция `--no-edit` оставляет прежнее сообщение коммита без изменений.
<a name="delete-pushed-commit"></a> <a name="delete-pushed-commit"></a>
### Я хочу удалить последний коммит ### Я хочу удалить последний коммит
Если хотите удалить опубликованные коммиты, воспользуйтесь приведенным ниже приемом. Однако, это бесповоротно изменит у Вас историю Git, а также испортит историю Git у любого, что уже стянул (pull) изменения из репозитория. Короче говоря, никогда так не делайте, если не уверены. Если хотите удалить опубликованные коммиты, воспользуйтесь приведенным ниже приемом. Однако, это бесповоротно изменит у Вас историю 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). Это работает, если Вы еще не сделали `push`. Если Вы уже сделали `push`, то единственный по-настоящему безопасный способ это `git revert SHAofBadCommit`. Это создаст новый коммит, который отменит все изменения предыдущего коммита. Или, если ветка, в которую вы делаете `push` безопасна для перезаписи (т.е. не предполагается, другие разработчики будут стягивать из нее изменения), то просто используйте `git push --force-with-lease`. Подробнее см. [в этом пункте выше](#delete-pushed-commit).
<a name="delete-any-commit"></a> <a name="delete-any-commit"></a>
### Удалить произвольный коммит ### Удалить произвольный коммит
Здесь уместны те же предупреждения, что и в пункте выше. По возможности, никогда так не делайте. Здесь уместны те же предупреждения, что и в пункте выше. По возможности, никогда так не делайте.
@ -219,6 +256,7 @@ $ git push --force-with-lease [remote] [branch]
Или сделайте [интерактивное перебазирование](#interactive-rebase) и удалите строки ненужных коммитов. Или сделайте [интерактивное перебазирование](#interactive-rebase) и удалите строки ненужных коммитов.
<a name="#force-push"></a> <a name="#force-push"></a>
### Я пытаюсь опубликовать исправленный коммит, но получаю сообщение об ошибке ### Я пытаюсь опубликовать исправленный коммит, но получаю сообщение об ошибке
```sh ```sh
@ -231,7 +269,7 @@ hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
``` ```
Напомним, что подобно перебазированию (см. ниже), исправление коммита (amend) **заменяет старый коммит новым**, поэтому Вы должны делать принудительный `push` (`--force-with-lease`) Ваших изменений, если хотите заменить уже опубликованные на удаленном репозитории коммиты. Будьте осторожны, когда так делаете &ndash; *всегда* проверяйте с какой веткой Вы проводите эти действия! Напомним, что подобно перебазированию (см. ниже), исправление коммита (amend) **заменяет старый коммит новым**, поэтому Вы должны делать принудительный `push` (`--force-with-lease`) Ваших изменений, если хотите заменить уже опубликованные на удаленном репозитории коммиты. Будьте осторожны, когда так делаете *всегда* проверяйте с какой веткой Вы проводите эти действия!
```sh ```sh
(my-branch)$ git push origin mybranch --force-with-lease (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`), но вообще этого следует избегать. Если Вы *абсолютно* уверены, что никто кроме Вас не работает с данной веткой или Вы хотите обновить вершину ветви в любом случае, то используйте `--force` (`-f`), но вообще этого следует избегать.
<a href="undo-git-reset-hard"></a> <a href="undo-git-reset-hard"></a>
### Я случайно сделал жесткий сброс (--hard) и теперь хочу вернуть свои изменения ### Я случайно сделал жесткий сброс (--hard) и теперь хочу вернуть свои изменения
Если Вы случайно сделали `git reset --hard`, то вы можете вернуть назад коммиты, т.к. Git несколько дней хранит все действия в журнале. Если Вы случайно сделали `git reset --hard`, то вы можете вернуть назад коммиты, т.к. Git несколько дней хранит все действия в журнале.
Замечание: Это относится только если ваша работа была сохранена, т.е. Вы сделали коммит или stash. `git reset --hard` _удалит_ несохраненные изменения, так что пользуйтесь им с осторожностью. (Безопасная опция это `git reset --keep`.) Замечание: Это относится только если ваша работа была сохранена, т.е. Вы сделали коммит или stash. `git reset --hard` *удалит* несохраненные изменения, так что пользуйтесь им с осторожностью. (Безопасная опция это `git reset --keep`.)
```sh ```sh
(master)$ git reflog (master)$ git reflog
@ -263,6 +302,7 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
## Подготовка изменений (staging) ## Подготовка изменений (staging)
<a href="#i-need-to-add-staged-changes-to-the-previous-commit"></a> <a href="#i-need-to-add-staged-changes-to-the-previous-commit"></a>
### Мне нужно добавить подготовленные изменения в предыдущий коммит ### Мне нужно добавить подготовленные изменения в предыдущий коммит
```sh ```sh
@ -271,6 +311,7 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
``` ```
<a name="commit-partial-new-file"></a> <a name="commit-partial-new-file"></a>
### Я хочу подготовить только часть файла, а не весь файл целиком ### Я хочу подготовить только часть файла, а не весь файл целиком
Обычно, если хотите подготовить часть файл, Вы запускаете: Обычно, если хотите подготовить часть файл, Вы запускаете:
@ -289,11 +330,13 @@ $ git add -N filename.x
`git diff --staged`, Вы увидите какие строки вы подготовили по-сравнению с тем, что сохранено в рабочей копии. `git diff --staged`, Вы увидите какие строки вы подготовили по-сравнению с тем, что сохранено в рабочей копии.
<a href="stage-in-two-commits"></a> <a href="stage-in-two-commits"></a>
### Я хочу добавить изменения одного файла в два разных коммита ### Я хочу добавить изменения одного файла в два разных коммита
`git add` добавляет в коммит весь файл целиком. `git add -p` позволяет интерактивно выбрать изменения, которые Вы хотите добавить. `git add` добавляет в коммит весь файл целиком. `git add -p` позволяет интерактивно выбрать изменения, которые Вы хотите добавить.
<a href="unstaging-edits-and-staging-the-unstaged"></a> <a href="unstaging-edits-and-staging-the-unstaged"></a>
### Я хочу подготовить свои неподготовленные правки и убрать из подготовки то, что уже подготовлено ### Я хочу подготовить свои неподготовленные правки и убрать из подготовки то, что уже подготовлено
Это сложно. Лучшее, что я смог придумать это отложить (stash) неподготовленные изменения. Затем сделать сброс. После этого вернуть отложенные изменения и добавить их. Это сложно. Лучшее, что я смог придумать это отложить (stash) неподготовленные изменения. Затем сделать сброс. После этого вернуть отложенные изменения и добавить их.
@ -308,6 +351,7 @@ $ git add -A
## Неподготовленные правки ## Неподготовленные правки
<a href="move-unstaged-edits-to-new-branch"></a> <a href="move-unstaged-edits-to-new-branch"></a>
### Я хочу переместить мои неподготовленные правки в новую ветку ### Я хочу переместить мои неподготовленные правки в новую ветку
```sh ```sh
@ -315,6 +359,7 @@ $ git checkout -b my-branch
``` ```
<a href="move-unstaged-edits-to-old-branch"></a> <a href="move-unstaged-edits-to-old-branch"></a>
### Я хочу переместить неподготовленные правки в другую существующую ветку ### Я хочу переместить неподготовленные правки в другую существующую ветку
```sh ```sh
@ -324,6 +369,7 @@ $ git stash pop
``` ```
<a href="i-want-to-discard-my-local-uncommitted-changes"></a> <a href="i-want-to-discard-my-local-uncommitted-changes"></a>
### Я хочу отменить мои локальные несохраненные изменения (подготовленные и неподготовленные) ### Я хочу отменить мои локальные несохраненные изменения (подготовленные и неподготовленные)
Если Вы хотите отменить все подготовленные и неподготовленные изменения, то можете сделать так: Если Вы хотите отменить все подготовленные и неподготовленные изменения, то можете сделать так:
@ -417,6 +463,7 @@ $ git checkout .
``` ```
<a href="i-want-to-discard-all-my-untracked-files"></a> <a href="i-want-to-discard-all-my-untracked-files"></a>
### Я хочу удалить все неотслеживаемые файлы ### Я хочу удалить все неотслеживаемые файлы
Когда Вы хотите удалить все неотслеживаемые файлы Когда Вы хотите удалить все неотслеживаемые файлы
@ -448,12 +495,15 @@ $ git branch -a
``` ```
<a name="create-branch-from-commit"></a> <a name="create-branch-from-commit"></a>
### Создать ветку на определенном коммите ### Создать ветку на определенном коммите
```sh ```sh
$ git checkout -b <branch> <SHA1_OF_COMMIT> $ git checkout -b <branch> <SHA1_OF_COMMIT>
``` ```
<a name="pull-wrong-branch"></a> <a name="pull-wrong-branch"></a>
### Я стянул изменения (pull) из неправильной ветки или в неправильную ветку ### Я стянул изменения (pull) из неправильной ветки или в неправильную ветку
Это очередная возможность воспользоваться `git reflog`, чтобы посмотреть куда указывала ваша HEAD перед неправильным pull. Это очередная возможность воспользоваться `git reflog`, чтобы посмотреть куда указывала ваша HEAD перед неправильным pull.
@ -473,6 +523,7 @@ $ git reset --hard c5bc55a
Готово. Готово.
<a href="discard-local-commits"></a> <a href="discard-local-commits"></a>
### Я хочу отменить локальные коммиты, чтобы моя ветка стала такой же как на сервере ### Я хочу отменить локальные коммиты, чтобы моя ветка стала такой же как на сервере
Подтвердите, что не хотите отправлять изменения на сервер. Подтвердите, что не хотите отправлять изменения на сервер.
@ -494,6 +545,7 @@ $ git reset --hard c5bc55a
``` ```
<a name="commit-wrong-branch"></a> <a name="commit-wrong-branch"></a>
### Я сохранил коммит в ветку master вместо новой ветки ### Я сохранил коммит в ветку master вместо новой ветки
Создайте новую ветку, оставаясь на master: Создайте новую ветку, оставаясь на master:
@ -528,6 +580,7 @@ HEAD is now at a13b85e
``` ```
<a name="keep-whole-file"></a> <a name="keep-whole-file"></a>
### Я хочу сохранить файл целиком из другого ref-ish ### Я хочу сохранить файл целиком из другого ref-ish
Скажем, у Вас рабочий spike (см. заметку) на сотни изменений. Всё работает. Теперь Вы сохраняете эту работу в другую ветку: Скажем, у Вас рабочий spike (см. заметку) на сотни изменений. Всё работает. Теперь Вы сохраняете эту работу в другую ветку:
@ -540,8 +593,8 @@ HEAD is now at a13b85e
Скажем, Вы имеете: Скажем, Вы имеете:
* ветку `solution` с решением к Вашему spike. На один коммит впереди `develop`. - ветку `solution` с решением к Вашему spike. На один коммит впереди `develop`.
* ветку `develop`, куда Вы хотите добавить Ваши изменения. - ветку `develop`, куда Вы хотите добавить Ваши изменения.
Вы можете выполнить это, перенеся содержимое файла в Вашу ветку: Вы можете выполнить это, перенеся содержимое файла в Вашу ветку:
@ -565,6 +618,7 @@ HEAD is now at a13b85e
Заметка: Spike-решения делаются для анализа или решения проблемы. Эти решения используют, чтобы оценить проблему, и отбрасывают сразу же, как только все получают ясное представление о проблеме. ~ [Wikipedia](https://en.wikipedia.org/wiki/Extreme_programming_practices). Заметка: Spike-решения делаются для анализа или решения проблемы. Эти решения используют, чтобы оценить проблему, и отбрасывают сразу же, как только все получают ясное представление о проблеме. ~ [Wikipedia](https://en.wikipedia.org/wiki/Extreme_programming_practices).
<a name="cherry-pick"></a> <a name="cherry-pick"></a>
### Я сделал несколько коммитов в одной ветке, а нужно было сохранять их в разных ветках ### Я сделал несколько коммитов в одной ветке, а нужно было сохранять их в разных ветках
Скажем, Вы в ветке master. Запустив `git log`, Вы увидите, что сделали два коммита: Скажем, Вы в ветке master. Запустив `git log`, Вы увидите, что сделали два коммита:
@ -630,7 +684,9 @@ HEAD is now at a13b85e
``` ```
<a name="delete-stale-local-branches"></a> <a name="delete-stale-local-branches"></a>
### Я хочу удалить локальные ветки, которые были удалены в upstream ### Я хочу удалить локальные ветки, которые были удалены в upstream
Как только Вы слили пулл-реквест на GitHub, Вам предлагают удалить слитую ветку из Вашего форка. Если Вы не планируете продолжать работу в этой ветке, то для поддержания рабочей копии в чистоте Вы можете удалить локальные копии ненужных веток, чтобы не путаться в них. Как только Вы слили пулл-реквест на GitHub, Вам предлагают удалить слитую ветку из Вашего форка. Если Вы не планируете продолжать работу в этой ветке, то для поддержания рабочей копии в чистоте Вы можете удалить локальные копии ненужных веток, чтобы не путаться в них.
```sh ```sh
@ -639,7 +695,8 @@ $ git fetch -p upstream
где `upstream` - удаленная ветка, из которой Вы хотите получить изменения. где `upstream` - удаленная ветка, из которой Вы хотите получить изменения.
<a name='restore-a-deleted-branch'></a> <a name="restore-a-deleted-branch"></a>
### Я нечаянно удалил мою ветку ### Я нечаянно удалил мою ветку
Если Вы регулярно отправляете изменения в удаленное хранилище, большую часть времени Вы в безопасности. Но в один прекрасный момент Вы всё же можете случайно удалить Ваши ветки. Скажем, мы создали ветку и создали новый файл: Если Вы регулярно отправляете изменения в удаленное хранилище, большую часть времени Вы в безопасности. Но в один прекрасный момент Вы всё же можете случайно удалить Ваши ветки. Скажем, мы создали ветку и создали новый файл:
@ -758,6 +815,7 @@ README.md foo.txt
``` ```
<a name="i-want-to-checkout-to-a-remote-branch-that-someone-else-is-working-on"></a> <a name="i-want-to-checkout-to-a-remote-branch-that-someone-else-is-working-on"></a>
### Я хочу перейти на удаленную ветку, над которой работает кто-то еще ### Я хочу перейти на удаленную ветку, над которой работает кто-то еще
Во-первых, получим все ветки из удаленного репозитория: Во-первых, получим все ветки из удаленного репозитория:
@ -781,13 +839,13 @@ Switched to a new branch 'daves'
### Я хочу создать новую удаленную ветку из текущей локальной ### Я хочу создать новую удаленную ветку из текущей локальной
```sh ```sh
$ git push <remote> $ git push <remote> HEAD
``` ```
Если Вы хотите, чтобы текущая локальная ветка отслеживала соответствующую удаленную (upstream) ветку, тогда выполните следующее: Если Вы хотите, чтобы текущая локальная ветка отслеживала соответствующую удаленную (upstream) ветку, тогда выполните следующее:
```sh ```sh
$ git push -u <remote> $ git push -u <remote> HEAD
``` ```
В режиме `upstream` или в режиме `simple` (по-умолчанию в Git 2.0) параметра `push.default`, следующая команда отправит текущую ветку в удаленную ветку, которая была ранее зарегистрирована с помощью -u : В режиме `upstream` или в режиме `simple` (по-умолчанию в Git 2.0) параметра `push.default`, следующая команда отправит текущую ветку в удаленную ветку, которая была ранее зарегистрирована с помощью -u :
@ -815,6 +873,7 @@ $ git branch -u [remotename]/[branch] [local-branch]
``` ```
<a name="i-want-to-set-my-HEAD-to-track-the-default-remote-branch"></a> <a name="i-want-to-set-my-HEAD-to-track-the-default-remote-branch"></a>
### Я хочу настроить HEAD на отслеживание основной удаленной ветки ### Я хочу настроить HEAD на отслеживание основной удаленной ветки
При просмотре удаленных веток можно увидеть какую удаленную ветку отслеживает HEAD. Может оказаться, что это не та ветка что нужно. При просмотре удаленных веток можно увидеть какую удаленную ветку отслеживает HEAD. Может оказаться, что это не та ветка что нужно.
@ -845,6 +904,7 @@ origin/HEAD set to master
## Перебазирование (rebase) и слияние (merge) ## Перебазирование (rebase) и слияние (merge)
<a name="undo-rebase"></a> <a name="undo-rebase"></a>
### Я хочу отменить перебазирование/слияние ### Я хочу отменить перебазирование/слияние
Вы можете слить/перебазировать Вашу ветку с неправильной веткой. А также бывают случаи, когда Вы не можете предугадать успешно ли завершится процесс перебазирования/слияния. Git сохраняет исходный указатель HEAD в переменную ORIG_HEAD перед тем как приступить к опасным операциям, так что вернуть ветку на состояние до перебазирования/слияния просто. Вы можете слить/перебазировать Вашу ветку с неправильной веткой. А также бывают случаи, когда Вы не можете предугадать успешно ли завершится процесс перебазирования/слияния. Git сохраняет исходный указатель HEAD в переменную ORIG_HEAD перед тем как приступить к опасным операциям, так что вернуть ветку на состояние до перебазирования/слияния просто.
@ -854,6 +914,7 @@ origin/HEAD set to master
``` ```
<a name="force-push-rebase"></a> <a name="force-push-rebase"></a>
### Я сделал перебазирование, но я не хочу делать принудительный push ### Я сделал перебазирование, но я не хочу делать принудительный push
К сожалению, вы должны сделать принудительный push, если хотите, чтобы изменения были отражены на удаленной ветке. Это потому что у вас изменена история. Удаленная ветка не примет изменения, если не сделать принудительный push. Это одна из основных причин, по которым большинство людей основывает свой рабочий процесс на слиянии вместо перебазирования - большие команды могут столкнуться с проблемами, если разработчики будут делать принудительный `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). Чтобы узнать больше, см. [эту SO ветку](https://stackoverflow.com/questions/11058312/how-can-i-use-git-rebase-without-requiring-a-forced-push).
<a name="interactive-rebase"></a> <a name="interactive-rebase"></a>
### Я хочу объединить коммиты ### Я хочу объединить коммиты
Предположим, что Вы работаете в ветке, которая стала или станет пулл-реквестом в `master`. В простейшем случае когда всё, что Вы хотите сделать - это объединить *все* коммиты в один единственный коммит и Вам не важны временные метки, Вы можете сделать сброс и заново сделать коммит. Убедитесь, что ветка master обновлена и Ваши изменения сохранены, затем: Предположим, что Вы работаете в ветке, которая стала или станет пулл-реквестом в `master`. В простейшем случае когда всё, что Вы хотите сделать - это объединить *все* коммиты в один единственный коммит и Вам не важны временные метки, Вы можете сделать сброс и заново сделать коммит. Убедитесь, что ветка master обновлена и Ваши изменения сохранены, затем:
@ -961,6 +1023,7 @@ Newer, awesomer features
``` ```
#### Безопасная стратегия слияния #### Безопасная стратегия слияния
`--no-commit` производит слияние, но не делает коммит результата, давая пользователю возможность проверить и доработать результат слияния перед коммитом. `no-ff` сохраняет доказательства того, что когда-то существовала ветка feature, сохраняя цельность истории проекта. `--no-commit` производит слияние, но не делает коммит результата, давая пользователю возможность проверить и доработать результат слияния перед коммитом. `no-ff` сохраняет доказательства того, что когда-то существовала ветка feature, сохраняя цельность истории проекта.
```sh ```sh
@ -974,6 +1037,7 @@ Newer, awesomer features
``` ```
<a name="rebase-unpushed-commits"></a> <a name="rebase-unpushed-commits"></a>
#### Я хочу объединить только неопубликованные коммиты #### Я хочу объединить только неопубликованные коммиты
Иногда у Вас бывает несколько временных коммитов, которые Вы хотите объединить перед публикацией в upstream. Вы не хотите ненароком объединить свои коммиты с уже опубликованными, потому что кто-то уже мог работать с ними. Иногда у Вас бывает несколько временных коммитов, которые Вы хотите объединить перед публикацией в upstream. Вы не хотите ненароком объединить свои коммиты с уже опубликованными, потому что кто-то уже мог работать с ними.
@ -1011,19 +1075,22 @@ Newer, awesomer features
### Возможные проблемы интерактивного перебазирования ### Возможные проблемы интерактивного перебазирования
<a name="noop"></a> <a name="noop"></a>
#### Экран перебазирования говорит 'noop' #### Экран перебазирования говорит 'noop'
Если Вы видите это: Если Вы видите это:
``` ```
noop noop
``` ```
Это значит, что Вы пытаетесь сделать перебазирование в ветку, которая уже имеет идентичный коммит или она *впереди* текущей ветки. Вы может попробовать: Это значит, что Вы пытаетесь сделать перебазирование в ветку, которая уже имеет идентичный коммит или она *впереди* текущей ветки. Вы может попробовать:
* удостовериться что Ваша ветка master находится там, где она должна быть - удостовериться что Ваша ветка master находится там, где она должна быть
* вместо этого перебазировать `HEAD~2` или что-то более раннее - вместо этого перебазировать `HEAD~2` или что-то более раннее
<a name="merge-conflict"></a> <a name="merge-conflict"></a>
#### Здесь были конфликты #### Здесь были конфликты
Если Вам не удается успешно завершить перебазирование, то, возможно, Вам придется разрешать конфликты. Если Вам не удается успешно завершить перебазирование, то, возможно, Вам придется разрешать конфликты.
@ -1083,6 +1150,7 @@ Changes not staged for commit:
``` ```
<a name="stashing"></a> <a name="stashing"></a>
## Отложенные изменения (stash) ## Отложенные изменения (stash)
### Отложить все правки ### Отложить все правки
@ -1114,6 +1182,7 @@ $ git stash push working-directory-path/filename1.ext working-directory-path/fil
``` ```
<a name="stash-msg"></a> <a name="stash-msg"></a>
### Отложить с сообщением ### Отложить с сообщением
```sh ```sh
@ -1121,6 +1190,7 @@ $ git stash save <message>
``` ```
<a name="stash-apply-specific"></a> <a name="stash-apply-specific"></a>
### Применить заданный stash из списка ### Применить заданный stash из списка
Во-первых, проверьте список отложенных изменений, используя Во-первых, проверьте список отложенных изменений, используя
@ -1149,13 +1219,14 @@ $ git log -S "string to find"
Общие параметры: Общие параметры:
* `--source` показывает ссылки, от которых можно добраться до каждого коммита. - `--source` показывает ссылки, от которых можно добраться до каждого коммита.
* `--all` ищет во всех ветках. - `--all` ищет во всех ветках.
* `--reverse` выводит коммиты в обратном порядке, это значит, что вверху будет первый коммит, в котором сделано это изменение. - `--reverse` выводит коммиты в обратном порядке, это значит, что вверху будет первый коммит, в котором сделано это изменение.
<a name="i-want-to-find-by-author-committer"></a> <a name="i-want-to-find-by-author-committer"></a>
### Я хочу искать по автору или сохранившему изменения (committer) ### Я хочу искать по автору или сохранившему изменения (committer)
Найти все коммиты по автору или сохранившему изменения: Найти все коммиты по автору или сохранившему изменения:
@ -1181,7 +1252,7 @@ $ git log -- <path to file>
$ git log -- **/*.js $ git log -- **/*.js
``` ```
При использовании подстановочных знаков используйте `--name-status` для просмотра списка сохраненных файлов, сохраненных в каждом коммите: При использовании подстановочных знаков используйте `--name-status` для просмотра списка файлов, сохраненных в каждом коммите:
```sh ```sh
$ git log --name-status -- **/*.js $ git log --name-status -- **/*.js
@ -1198,6 +1269,7 @@ $ git tag --contains <commitid>
## Субмодули ## Субмодули
<a name="clone-submodules"></a> <a name="clone-submodules"></a>
### Клонировать все субмодули ### Клонировать все субмодули
```sh ```sh
@ -1211,6 +1283,7 @@ $ git submodule update --init --recursive
``` ```
<a name="delete-submodule"></a> <a name="delete-submodule"></a>
### Удалить субмодуль ### Удалить субмодуль
Создание субмодуля довольно прямолинейно, чего не скажешь об удалении. Команды, которые Вам нужны: Создание субмодуля довольно прямолинейно, чего не скажешь об удалении. Команды, которые Вам нужны:
@ -1246,6 +1319,7 @@ $ git push <remote> :refs/tags/<tag_name>
``` ```
<a name="recover-tag"></a> <a name="recover-tag"></a>
### Восстановить удаленную метку ### Восстановить удаленную метку
Если хотите восстановить метку, которая была удалена, Вы можете сделать следующее: во-первых, Вам нужно найти недостижимую метку: Если хотите восстановить метку, которая была удалена, Вы можете сделать следующее: во-первых, Вам нужно найти недостижимую метку:
@ -1281,6 +1355,7 @@ $ git archive --format zip --output /full/path/to/zipfile.zip master
## Отслеживание файлов ## Отслеживание файлов
<a href="i-want-to-change-a-file-names-capitalization-without-changing-the-contents-of-the-file"></a> <a href="i-want-to-change-a-file-names-capitalization-without-changing-the-contents-of-the-file"></a>
### Я хочу изменить регистр в имени файла, не меняя содержимое файла ### Я хочу изменить регистр в имени файла, не меняя содержимое файла
```sh ```sh
@ -1295,6 +1370,7 @@ $ git archive --format zip --output /full/path/to/zipfile.zip master
``` ```
<a href="remove-from-git"></a> <a href="remove-from-git"></a>
### Я хочу удалить файл из git, но оставить сам файл ### Я хочу удалить файл из git, но оставить сам файл
```sh ```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 (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
```
## Конфигурация ## Конфигурация
<a name="adding-command-aliases"></a>
### Я хочу добавить псевдонимы для некоторых команд Git ### Я хочу добавить псевдонимы для некоторых команд Git
В OS X и Linux Ваш файл конфигурации Git хранится в ```~/.gitconfig```. В качестве примера я добавил некоторые псевдонимы, которые сам использую для краткости (а также некоторые из моих типичных опечаток), в раздел ```[alias]``` как показано ниже: В OS X и Linux Ваш файл конфигурации Git хранится в `~/.gitconfig`. В качестве примера я добавил некоторые псевдонимы, которые сам использую для краткости (а также некоторые из моих типичных опечаток), в раздел `[alias]` как показано ниже:
```vim ```vim
[alias] [alias]
@ -1345,7 +1434,6 @@ $ git archive --format zip --output /full/path/to/zipfile.zip master
zap = fetch -p zap = fetch -p
``` ```
<a name="adding-empty-repository"></a>
### Я хочу добавить в свой репозиторий пустую папку ### Я хочу добавить в свой репозиторий пустую папку
Вы не можете этого сделать! Git просто не поддерживает этого, но есть уловка. Вы можете создать файл .gitignore в папке со следующим содержанием: Вы не можете этого сделать! Git просто не поддерживает этого, но есть уловка. Вы можете создать файл .gitignore в папке со следующим содержанием:
@ -1364,9 +1452,8 @@ $ mkdir mydir
$ touch mydir/.gitkeep $ touch mydir/.gitkeep
``` ```
Вы можете назвать его просто .keep , в этом случае вторая строка выше будет ```touch mydir/.keep``` Вы можете назвать его просто .keep , в этом случае вторая строка выше будет `touch mydir/.keep`
<a name="credential-helper"></a>
### Я хочу сохранить имя пользователя и пароль для репозитория ### Я хочу сохранить имя пользователя и пароль для репозитория
У Вас может быть репозиторий, требующий авторизации. В этом случае вы можете сохранить на время имя пользователя и пароль, и Вам не потребуется вводить их при каждом вызове push / pull. Помощник по учетным записям сделает это за Вас. У Вас может быть репозиторий, требующий авторизации. В этом случае вы можете сохранить на время имя пользователя и пароль, и Вам не потребуется вводить их при каждом вызове push / pull. Помощник по учетным записям сделает это за Вас.
@ -1393,6 +1480,28 @@ $ git config core.fileMode false
$ git config --global 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 - [Pro Git](https://git-scm.com/book/en/v2) - великолепная книга Скотта Чакона и Бена Страуба про Git
* [Git Internals](https://github.com/pluralsight/git-internals-pdf) - еще одна великолепная книга Скотта Чакона, посвященная Git - [Git Internals](https://github.com/pluralsight/git-internals-pdf) - еще одна великолепная книга Скотта Чакона, посвященная Git
## Учебники ## Учебники
* [Atlassian's Git tutorial](https://www.atlassian.com/git/tutorials) Получите Git сразу с учебниками от начального до продвинутого уровня. - [Atlassian's Git tutorial](https://www.atlassian.com/git/tutorials) Получите Git сразу с учебниками от начального до продвинутого уровня.
* [Изучаем ветвление в Git](https://learngitbranching.js.org/) Интерактивный веб-учебник по ветвлению/слиянию/перебазированию - [Изучаем ветвление в Git](https://learngitbranching.js.org/) Интерактивный веб-учебник по ветвлению/слиянию/перебазированию
* [Getting solid at Git rebase vs. merge](https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa) - [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 в совместной разработке проектов с открытым исходным кодом - [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 в качестве рабочего процесса, в частности с пустыми пулл-реквестами - [GitHub как рабочий процесс](https://hugogiraudel.com/2015/08/13/github-as-a-workflow/) - Интересный подход к использованию GitHub в качестве рабочего процесса, в частности с пустыми пулл-реквестами
* [Githug](https://github.com/Gazler/githug) - Игра для изучения более общих рабочих процессов Git - [Githug](https://github.com/Gazler/githug) - Игра для изучения более общих рабочих процессов Git
## Скрипты и инструменты ## Скрипты и инструменты
* [firstaidgit.io](http://firstaidgit.io/) Выборка наиболее частых вопросов и ответов по Git c поиском - [firstaidgit.io](http://firstaidgit.io/) Выборка наиболее частых вопросов и ответов по Git c поиском
* [git-extra-commands](https://github.com/unixorn/git-extra-commands) - сборник полезных дополнительных скриптов для Git - [git-extra-commands](https://github.com/unixorn/git-extra-commands) - сборник полезных дополнительных скриптов для Git
* [git-extras](https://github.com/tj/git-extras) - GIT utilities -- статистика репозитория, REPL, генерация журнала изменений, статистика по авторам изменений и многое другое - [git-extras](https://github.com/tj/git-extras) - GIT utilities -- статистика репозитория, REPL, генерация журнала изменений, статистика по авторам изменений и многое другое
* [git-fire](https://github.com/qw3rtman/git-fire) - git-fire - это плагин для Git, который предупреждает при потенциально опасных действиях, таких как: добавление всех файлов из текущей папки, создание коммита и публикация измений в новую ветку (для предотвращения конфликтов при слиянии). - [git-fire](https://github.com/qw3rtman/git-fire) - git-fire - это плагин для Git, который предупреждает при потенциально опасных действиях, таких как: добавление всех файлов из текущей папки, создание коммита и публикация измений в новую ветку (для предотвращения конфликтов при слиянии).
* [git-tips](https://github.com/git-tips/tips) - Краткие советы по Git - [git-tips](https://github.com/git-tips/tips) - Краткие советы по Git
* [git-town](https://github.com/Originate/git-town) - Общая высокоуровневая поддержка рабочего процесса Git! http://www.git-town.com - [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 - [GitKraken](https://www.gitkraken.com/) - роскошный Git-клиент для Windows, Mac и Linux
* [GitUp](https://github.com/git-up/GitUp) - новый графический клиент, имеющий весьма своеобразные методы работы со сложностями Git - [git-cola](https://git-cola.github.io/) - еще один Git-клиент для Windows и OS X
* [gitx-dev](https://rowanj.github.io/gitx/) - еще один графический Git-клиент для OS X - [GitUp](https://github.com/git-up/GitUp) - новый графический клиент, имеющий весьма своеобразные методы работы со сложностями Git
* [Sourcetree](https://www.sourcetreeapp.com/) - Простота и мощь в красивом и свободном графическом Git-клиенте. Для Windows и Mac. - [gitx-dev](https://rowanj.github.io/gitx/) - еще один графический Git-клиент для OS X
* [Tower](https://www.git-tower.com/) - графический Git-клиент для OS X (платный) - [Sourcetree](https://www.sourcetreeapp.com/) - Простота и мощь в красивом и свободном графическом Git-клиенте. Для Windows и Mac.
* [tig](https://jonas.github.io/tig/) - консольный текстовый интерфейс для Git - [Tower](https://www.git-tower.com/) - графический Git-клиент для OS X (платный)
* [Magit](https://magit.vc/) - интерфейс для Git, реализованный в виде модуля Emacs. - [tig](https://jonas.github.io/tig/) - консольный текстовый интерфейс для Git
* [GitExtensions](https://github.com/gitextensions/gitextensions) - расширение оболочки, плагин для Visual Studio 2010-2015 и автономный инструмент для управления репозиториями Git. - [Magit](https://magit.vc/) - интерфейс для Git, реализованный в виде модуля Emacs.
* [Fork](https://git-fork.com/) - быстрый и дружелюбный Git-клиент для Mac (бета) - [GitExtensions](https://github.com/gitextensions/gitextensions) - расширение оболочки, плагин для Visual Studio 2010-2015 и автономный инструмент для управления репозиториями Git.
* [gmaster](https://gmaster.io/) - Git-клиент для Windows с трехсторонним слиянием, обнаружением рефакторинга, семантическим сравнением и слиянием (бета) - [Fork](https://git-fork.com/) - быстрый и дружелюбный Git-клиент для Mac (бета)
* [gitk](https://git-scm.com/docs/gitk) - Git-клиент под Linux для просмотра состояния репозитория. - [gmaster](https://gmaster.io/) - Git-клиент для Windows с трехсторонним слиянием, обнаружением рефакторинга, семантическим сравнением и слиянием (бета)
- [gitk](https://git-scm.com/docs/gitk) - Git-клиент под Linux для просмотра состояния репозитория.