0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><em>Это перевод заметки "<a>Oh shit, git!</a>" от Katie Sylor-Miller.</em></p>
1
<p><em>Это перевод заметки "<a>Oh shit, git!</a>" от Katie Sylor-Miller.</em></p>
2
<p>Git - сложная штука. Испортить все очень легко, а исправить проблему иногда чертовски сложно. В официальной документации прослеживается проблема курицы и яйца: сложно понять как выйти из сложной ситуации если не знаешь название штуки, которая тебе требуется чтобы исправить проблему.</p>
2
<p>Git - сложная штука. Испортить все очень легко, а исправить проблему иногда чертовски сложно. В официальной документации прослеживается проблема курицы и яйца: сложно понять как выйти из сложной ситуации если не знаешь название штуки, которая тебе требуется чтобы исправить проблему.</p>
3
<p>Вот список плохих ситуаций, в которые я попадала, и как я в итоге смогла выбраться. На простом языке!</p>
3
<p>Вот список плохих ситуаций, в которые я попадала, и как я в итоге смогла выбраться. На простом языке!</p>
4
<h3>Ой, блин, я сделал что-то не то. Тут же есть машина времени, правда?..</h3>
4
<h3>Ой, блин, я сделал что-то не то. Тут же есть машина времени, правда?..</h3>
5
<h3>Блин! Сделал коммит, но понял, что забыл одну мелочь</h3>
5
<h3>Блин! Сделал коммит, но понял, что забыл одну мелочь</h3>
6
<p># сделай что хотел git add . # или добавляй файлы по одному git commit --amend # теперь измени или оставь старое сообщение коммита # теперь твой последний коммит включает то новое изменение!</p>
6
<p># сделай что хотел git add . # или добавляй файлы по одному git commit --amend # теперь измени или оставь старое сообщение коммита # теперь твой последний коммит включает то новое изменение!</p>
7
<h3>Ой, блин, нужно изменить сообщение в последнем коммите</h3>
7
<h3>Ой, блин, нужно изменить сообщение в последнем коммите</h3>
8
<p>git commit --amend # тут можно изменить сообщение</p>
8
<p>git commit --amend # тут можно изменить сообщение</p>
9
<h3>Бли-и-ин! Коммитнул в мастер, а надо было в новую ветку!</h3>
9
<h3>Бли-и-ин! Коммитнул в мастер, а надо было в новую ветку!</h3>
10
<p># создай новую ветку на основе мастера git branch some-new-branch-name # удали последний коммит из мастера git reset HEAD~ --hard git checkout some-new-branch-name # теперь тот коммит в новой ветке! :)</p>
10
<p># создай новую ветку на основе мастера git branch some-new-branch-name # удали последний коммит из мастера git reset HEAD~ --hard git checkout some-new-branch-name # теперь тот коммит в новой ветке! :)</p>
11
<p>Естественно, это не сработает если ты уже сделал пуш в origin. Ну, и если коммитов больше, чем один, то надо git reset HEAD@{число}.</p>
11
<p>Естественно, это не сработает если ты уже сделал пуш в origin. Ну, и если коммитов больше, чем один, то надо git reset HEAD@{число}.</p>
12
<h3>Блин! Коммитнул не в ту ветку.</h3>
12
<h3>Блин! Коммитнул не в ту ветку.</h3>
13
<p># отмени последний коммит, но оставь изменения git reset HEAD~ --soft git stash # перейди в нужную ветку git checkout name-of-the-correct-branch git stash pop git add . # или добавь файлы по одному git commit -m "your message here" # теперь изменения в нужной ветке</p>
13
<p># отмени последний коммит, но оставь изменения git reset HEAD~ --soft git stash # перейди в нужную ветку git checkout name-of-the-correct-branch git stash pop git add . # или добавь файлы по одному git commit -m "your message here" # теперь изменения в нужной ветке</p>
14
<p>Другой вариант - использовать cherry-pick:</p>
14
<p>Другой вариант - использовать cherry-pick:</p>
15
<p>git checkout name-of-the-correct-branch # возьми последний коммит мастера git cherry-pick master # удали его из мастера git checkout master git reset HEAD~ --hard</p>
15
<p>git checkout name-of-the-correct-branch # возьми последний коммит мастера git cherry-pick master # удали его из мастера git checkout master git reset HEAD~ --hard</p>
16
<h3>Блин, сделал diff, но ничего не происходит!</h3>
16
<h3>Блин, сделал diff, но ничего не происходит!</h3>
17
<p>git diff --staged</p>
17
<p>git diff --staged</p>
18
<p>Git показывает изменения в diff только для тех файлов, которые еще не добавлены в staging area (еще не сделан git add). С флагом --staged будет показывать diff для добавленных файлов.</p>
18
<p>Git показывает изменения в diff только для тех файлов, которые еще не добавлены в staging area (еще не сделан git add). С флагом --staged будет показывать diff для добавленных файлов.</p>
19
<h3>Нахрен всё, я сдаюсь</h3>
19
<h3>Нахрен всё, я сдаюсь</h3>
20
<p>cd .. sudo rm -r fucking-git-repo-dir git clone https://some.github.url/fucking-git-repo-dir.git cd fucking-git-repo-dir</p>
20
<p>cd .. sudo rm -r fucking-git-repo-dir git clone https://some.github.url/fucking-git-repo-dir.git cd fucking-git-repo-dir</p>