Статьи

Git-oh — $ #! T — Несколько советов для начинающих Git

Я многое узнал о git, обычно в спешке после того, как запутался и должен был это исправить. Вот некоторые основные приемы, которые я изучил, которые могут помочь новичку в git.

Исправление вашего плохого кода

Допустим, вы клерк, работающий в министерстве правды Оруэлла, и вы узнаете, что новый шоколадный рацион составляет 20 граммов. Вы посмотрите на транскрипт выпусков новостей, newscast.txt , который гласит:


… и в других новостях министерство изобилия объявило, что шоколадные рационы будут оставаться стабильными на уровне 40 граммов в предстоящем квартале …

Ну, это не подойдет. Мы модифицируем расшифровку транскрипта, чтобы сказать:


… и в других новостях Министерство изобилия объявило, что шоколадные пайки будут сокращены до 20 граммов в следующем квартале …

 И мы обязуемся:

$ git add newscast.txt
$ git commit -m "Fixed chocolate ration"
[master 9772a49] Fixed chocolate ration
 1 files changed, 1 insertions(+), 1 deletions(-)

 Когда ты собираешься толкнуть, твой начальник, который завис, кричит: «Ты хочешь быть безличным? Не говори, что они понизили рацион!

Итак, мы изменим файл снова:


… и в других новостях Министерство изобилия объявило, что шоколадные пайки будут увеличены до 20 граммов в следующем квартале …

 

Теперь мы добавим это изменение, как будто мы собираемся сделать новый коммит:

$ git add newscast.txt
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   newscast.txt
#

 Запуск git commit —amend подметает все в нашей промежуточной области в последний коммит:

$ # this opens your text editor, in case you want to change the message
$ git commit --amend
[master 04ce65d] Fixed chocolate ration
 1 files changed, 1 insertions(+), 1 deletions(-)

 Теперь у вас есть только один коммит с «правильными» изменениями.

Мы всегда были в состоянии войны с Eastasia

Иногда ваша ошибка настолько серьезна, что вы даже не хотите, чтобы она больше существовала в истории хранилища. Если вы еще не нажали, вы можете использовать git reset, чтобы переписать любую историю, которая произошла после данного коммита.

Допустим, мы что-то напутали и хотим вернуться к 72ecbbda47c0712846312849bab1fb458cd9fffb:

$ git reset --hard 72ecbbda47c0712846312849bab1fb458cd9fffb

 

И вы вернулись к 72ecbbda47c0712846312849bab1fb458cd9fffb, как и то, что никогда не происходило.

git reset не только хорош для истории ревизионистов, но и хорош, когда у вас конфликт слияния, некоторые удаленные файлы, странная вещь с ветками, и вы даже не знаете, что происходит: вы просто хотите вернуться домой. Хард ресет может избавить вас почти от любой проблемы.

Тем не менее, после того, как вы нажали, сброс не является вариантом. Если вы сбросите общедоступное репо в «реальном» проекте, вы останетесь без посторонней помощи, так что ваша голова будет крутиться.

Когда вы уже столкнулись с преступным мышлением

Допустим, вы допустили ошибку (как указано выше), но уже отправили в удаленный репозиторий. Теперь вы должны либо исправить коммит, либо удалить его.

В приведенном выше примере это достаточно легко исправить: замените «разрезать шоколадный рацион» на «поднял шоколадный рацион», и все готово, так что вы можете просто нажать новый коммит с исправлением.

Однако иногда исправление занимает больше времени (например, вам нужно исследовать правдоподобную историю, чтобы объяснить несоответствия). Вы не хотите, чтобы кто-то запутался в это время, поэтому, если вы не можете сразу исправить историю, вы должны вежливо от нее отказаться. Это где Git Revert приходит.

Сначала найдите хеш коммита, который вы хотите отменить.

$ git log -1 # -1 means only show the latest 1 commit
commit 72ecbbda47c0712846312849bab1fb458cd9fffb
Author: Kristina <[email protected]>
Date:   Thu Feb 23 09:07:58 2012 -0500
 
    Airplane was now invented by the Party

 Теперь вернем этот хеш:

$ git revert 72ecbbda47c0712846312849bab1fb458cd9fffb

 В вашем редакторе появится git revert, и вы можете, если хотите, связываться с сообщением об отмене.

Changing airplane's invention date is going to take more work than anticipated
 
This reverts commit 72ecbbda47c0712846312849bab1fb458cd9fffb.
 
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   newscast.txt
#

Сохраните, выйдите и нажмите на удаленное хранилище.

$ git revert 72ecbbda47c0712846312849bab1fb458cd9fffb
[master 84e6f13] Changing airplane's invention date is going to take more work than anticipated
 1 files changed, 0 insertions(+), 1 deletions(-)

Вы можете отменить любой коммит из любого времени в истории. Обратите внимание, что это создает «uncommit» в дополнение к исходному коммиту: по сути, это создает «противоположный diff» для отмены исходного коммита. Таким образом, оригинальный коммит все еще там.

 

Невежество — это сила, но на всякий случай …

Некоторые ресурсы, которые вы можете найти полезными при изучении git:

  • git gui: неоценим для постановки коммитов
  • gitk: легче читать, чем git log при изучении истории коммитов
  • GitReady : самый полезный сайт, который я нашел для рецептов общих задач.

И помните, используйте полное предложение, описывающее ваши изменения в сообщениях коммитов. Большой Брат смотрит.