Статьи

Некоторые заметки о Git

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

Remotes

В типичном рабочем процессе с открытым исходным кодом, использующем GitHub или BitBucket, вы должны преобразовать основной репозиторий в свой собственный, а затем клонировать эту копию на локальный компьютер:

    git clone [email protected]:akrabat/joind.in.git

Затем вам необходимо подключить ваш локальный репозиторий к основному репозиторию. По соглашению основной репозиторий называется восходящим :

    cd joind.in
    git remote add upstream git://github.com/joindin/joind.in.git

Чтобы синхронизировать ваш локальный репозиторий с апстримом и обновить вашу копию обратно в BitBucket / GitHub:

    git checkout master
    git fetch upstream
    git merge --ff-only upstream/master
    git push origin

Если слияние не удастся, значит, произошло что-то плохое, и вам понадобится Google! Один из вариантов — заставить ваш мастер соответствовать исходящему потоку, используя git reset —hard upstream / master, а затем git push —force origin.

разветвление

Основная ветка в хранилище называется master . Никогда не пишите код прямо на мастере. Всегда создавайте ветку и код на этом, а затем объединяйтесь с мастером, когда закончите.

(Обратите внимание, что команда push также используется в этом документе для синхронизации вашего локального репозитория с вашим пультом в BitBucket / GitHub. Если вы не хотите публиковать, то не нажимайте.)

Создать ветку:

    git checkout -b my-branch-name
    git push origin my-branch-name

Перечислите все филиалы:

    git branch -v

Для вывода списка всех удаленных веток также используйте ключ -a:

    git branch -v -a

Перейдите из одной ветви в другую:

    git checkout another-branch-name

Удалить ветку:

    git branch -D my-branch-name
    git push origin :my-branch-name

Перебазировать мастер на ветку:

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

    git fetch upstream
    git checkout my-branch-name
    git rebase -f upstream/master
    git push -f origin my-branch

Внесите удаленную ветку в ваш локальный репозиторий:

Если вы хотите работать с веткой, которая находится в удаленном хранилище, вам нужно создать собственную ветку отслеживания :

    git fetch upstream
    git checkout master
    git branch -t upstream/remote-branch-name
    git push origin remote-branch-name

Имя вашей локальной ветви будет соответствовать имени удаленной ветви.

Синхронизировать удаленную ветку с локальной

    git fetch upstream
    git checkout remote-branch-name
    git merge upstream/remote-branch-name
    git push origin

совершение

Чтобы внести изменения:

Чтобы зафиксировать изменение, сначала нужно поместить файлы, которые вы хотите зафиксировать, в индекс :

    git add filename

Затем вы можете зафиксировать:

    git commit -m "my commit message"
    git push origin

Обратите внимание, что если вы измените имя файла после добавления в индекс, то изменение не будет зафиксировано, пока ваш git не добавит файл снова. Информацию о хорошем сообщении фиксации читайте в «Заметке о сообщениях Git Commit» от Tim Pope.

сращивание

Слить ветку в мастер:

    git checkout master
    git fetch upstream && git merge --ff-only upstream/master
    git merge --no-ff my-branch-name

Обратите внимание, что вам не нужно ничего совершать. Вам нужно толкать, хотя:

    git push

Если были конфликты, то вам нужно разрешить их, отредактировав файлы соответствующим образом (ищите <<<<<<<). На этом этапе вам нужно зафиксировать ваши изменения:

    git add .
    git commit
    git push

Откажитесь от конфликтующего слияния:

    git reset --hard HEAD

Работа с вашим хранилищем

Чтобы узнать, что случилось:

    git reflog -10

Это обеспечивает список последних 10 вещей, которые вы сделали в этом хранилище во всех ветвях.

    git log --oneline -10

Это обеспечивает список последних 10 коммитов, которые произошли в этой ветке

В обоих случаях первый столбец содержит ссылку на хэш коммита, который однозначно идентифицирует каждый коммит.

Чтобы узнать текущий коммит:

    git log -1

Отменить все рабочие изменения

    git checkout .

Чтобы отменить коммит:

Найдите коммит, к которому вы хотите вернуться через журнал или reflog:

    git reset --hard abcdef0

Вы также можете использовать номер «HEAD» из reflog:

    git reset --hard HEAD@{1}

Чтобы изменить последнее сообщение о коммите:

    git commit --amend -m "New commit message"

Лучше сделать это, прежде чем нажать. Если вы нажали, то вам нужно принудительно нажать, используя git push —force, и ожидать от своих коллег больших хлопот.

Различия

Чтобы выяснить разницу между вашими правками и последним коммитом:

Все файлы:

    git diff

Один файл:

    git diff -- my-filename

Чтобы узнать разницу между текущей веткой и мастером:

    git diff master..HEAD my-filename

Чтобы выяснить разницу между локальным мастером и мастером происхождения:

    git diff HEAD...origin/master

Некоторые псевдонимы

Псевдонимы позволяют создавать новые команды git и обычно используются для создания ярлыков:

Введите их из командной строки:

    $ git config --global alias.st status
    $ git config --global alias.staged 'diff --staged'
    $ git config --global alias.unstage 'reset HEAD --'
    $ git config --global alias.last 'log -1 HEAD'

Это дает вам несколько новых команд git:

  • git st => просмотреть текущий статус
  • git staged => посмотреть разницу в том, что в данный момент ставится
  • git unstage filename => Удалить имя файла из области подготовки
  • git last => просмотреть последний коммит

Полезные ссылки