Этот набор заметок охватывает основные вещи, которые, я думаю, вам нужно знать о работе с 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 => просмотреть последний коммит