Как посмотреть список файлов в git
Данная команда создает каталог с именем sharedproject.git c правами на запись в него. Подробнее тут.
Клонирование удаленного репозитория в локальный
Клонирование локального репозитория на удаленный
Если у вас уже есть локальный репозиторий Git и вы хотите его выложить в общий доступ, то сперва вам надо создать удаленный репозиторий (например на GitHub), а затем дать команды представленные ниже, изменив соотвественно часть с названием вашего репозитория.
2. Верифицируем что удаленный репозиторий связан с нашим
$ git remote -v
3. Публикуем ветку master на удаленном репозитории
$ git push -u origin master
Более подробно можно почитать тут.
Задаем имя пользователя и электронную почту
Просмотр настроек Git
Получение справки (помощи) по команде Git
Например выведем справку по команде config (откроется браузер со справкой)
$ git help config
Настройка русских шрифтов (cp1251) в Git
Эти команды замечательно работают в msysgit 1.9.5. Как будет в других версия не знаю. Но надеюсь, что в более новых тоже будет работать. Более подробно про настройку русского языка в Git можно почитать тут. Так же они правильно работают при установке Git из пакетов Cygwin, подробнее можно почитать тут.
ну или просто строкой в разделе [i18n]
filesEncoding = windows-1251
А вообще лучше вести проекты в кодировке UTF-8, если это возможно конечно.
Просмотр информации о состоянии файлов в Git
Основной инструмент, используемый для определения, какие файлы в каком состоянии находятся — это команда:
$ git status
И ее более краткий вывод:
$ git status -s
Просмотр разницы (что конкретно было изменено в файлах) между рабочим каталогом и индексом (staged area)
$ git diff
Более подробно смотрим тут.
Фиксация изменений (коммит)
Если дать команду git commit без дополнительных параметров, то сперва будет вызван редактор для ввода комментария к коммиту и после сохранения комментария будет произведен коммит (фиксация изменений)
$ git commit
Чтобы включить в комментарий к коммиту информацию о том какие именно были сделаны изменения в каких файлах надо дать команду
$ git commit -v
По существу по данной команде в комментарий будет также помещена дельта diff изменений, таким образом вы сможете точно увидеть всё, что сделано.
Автоматически добавить все измененные файлы в коммит
$ git commit -a
Удаление файлов из Git
По существу это удаление файла из отслеживаемых. Если файл уже был до этого закоммичен в Git, то из старых коммитов его по прежнему можно будет достать.
Удаление файла из отслеживаемых Git, а так же его физическое удаление из рабочего каталога
$ git rm <file_name>
Удаление проиндексированного измененного файла
$ git rm -f <file_name>
Более подробно смотрим тут.
Переименование файла
$ git mv <old_file_name> <new_file_name>
Просмотр истории коммитов
Самый простой вариант это git log с разными ключами (смотрим help). Тут приведу просто примеры. А подробнеетут или в мануале.
Вывод простой истории коммитов
$ git log
Вывод последних n записей, в примере вывод двух последних записей
$ git log -2
Вывод дельты (diff) разницы между последними двумя изменениями (на уровне строк)
$ git log -p -2
Параметры ключа format
Другой полезный фильтр это опция –S, которая как параметр принимает строку и показывает только те коммиты где эта строка была изменена, добавлена или удалена.
$ git log -S<stirng>
Пример будет искать строку MyStringForSearch
$ git log -SMyStringForSearch
Отмена изменений
Отмена индексации файла (исключение из индекса)
$ git reset HEAD <file>
С этой командой надо быть особо осторожным, подробнее тут.
Работа с удаленными репозиториями
Просмотр удаленных репозиториев
$ git remote
Более подробный вывод о них
$ git remote -v
Получение изменений с удаленного репозитория под именем tr в локальную ветку tr
$ git fetch tr
Отправка данных на удаленный репозиторий. Формат git push [удал. сервер] [локальная ветка]
$ git push origin master
Инспекция удаленного репозитория git remote show [удал. сервер]
$ git remote show origin
Переименование удаленных репозиториев (по существу переименование локальной ссылки на удаленный репозиторий)
$ git remote rename <old_name> <new_name>
$ git remote rename tr newtr
Подробней о работе с удаленными репозиториями тут.
А вообще настройка своего сервера Git это отдельная тема. Частично рассмотрена тут.
Работа с ветками
Посмотреть локальные ветки
$ git branch
Посмотреть последний коммит на каждой из локальных веток
$ git branch –v
Чтобы посмотреть все существующие локальные и удаленные ветки можно дать команду
$ git branch –a
Посмотреть последние коммиты на всех ветках (локальных и удаленных)
$ git branch –a -v
Посмотреть отслеживаемые ветки
$ git branch –vv
Сделать ветку локальную ветку serverfix отслеживаемой
$ git branch -u origin/serverfix
Создать ветку
$ git branch <имя_ветки>
Создать ветку на определенном коммите
$git branch new_branch 5a0eb04
Переименовать ветку
git branch -m <oldname> <newname>
Переименовать текущую ветку
git branch -m <newname>
Переключится на ветку
$ git checkout <имя_ветки>
Создать ветку и сразу же переключится на нее
$ git checkout -b <имя_ветки>
Слияние веток (в примере находимся на ветке master и сливаем с ней ветку hotfix)
$ git checkout master
$ git merge hotfix
Работа с метками
Посмотреть все (перечисляет в алфавитном порядке, а не по времени их создания)
$ git tag
Создание легковесной метки на текущем коммите
$ git tag <имя_метки>
$ git tag MyTAG
Посмотреть метки вместе с комментариями к коммитам, а так же с именами поставивших метки
$ git show <tag>
$ git show MyTAG
Так же можно выставлять метки и на уже пройденные коммиты. Подробнее о метках тут.
Задание псевдонимов для команд Git
Псевдонимы можно создать как в конфигурационных файлах Git, так и в конфиге Bash, но важно понимать в чем разница.
Задание псевдонимов в конфигах Git
Теперь достаточно давать команды
$ git co
$ git br
$ git ci
$ git st
То есть через задание алиасов в конфиге Git мы не избавляемся от необходимости писать команду git, но все же это короче.
Это делает эквивалентными следующие две команды:
$ git unstage fileA
$ git reset HEAD fileA
git config --global user.name "[name]" — установить имя, которое будет прикрепляться к коммиту.
git config --global user.email "[email address]" — установить email, который будет прикрепляться к коммиту.
git config --global color.ui auto — включить полезную подсветку командной строки.
git config --global push.default current — обновлять удаленную ветку с таким же именем, что и локальная, при пуше изменений (если не указано иного).
git config --global diff.tool [tool] — установить программу для разрешения конфликтов при слиянии.
Создание репозиториев
git init [project-name] — создать новый локальный репозиторий с заданным именем.
git clone [url] — загрузить проект и его полную историю изменений.
Работа с изменениями
git status — полный список изменений файлов, ожидающих коммита.
git status -s — краткий вид изменений.
git diff — показать изменения в файлах, которые еще не были добавлены в индекс коммита (staged).
git add [file] — сделать указанный файл готовым для коммита.
git add . — сделать все измененные файлы готовыми для коммита.
git add '*.txt' — добавить только файлы, соответствующие указанному выражению.
git add --patch filename — позволяет выбрать какие изменения из файла добавятся в коммит.
git diff --staged — показать что было добавленно в индекс с помощью git add , но еще не было закоммиченно.
git diff HEAD — показать что изменилось с последнего коммита.
git diff HEAD^ — показать что изменилось с предпоследнего коммита.
git diff [branch] — сравнить текущую ветку с заданной.
git difftool -d — то же самое, что и diff , но показывает изменения в заданной difftool.
git difftool -d master.. — показать изменения, сделанные в текущей ветке.
git diff --stat — показать статистику какие файлы были изменены и как.
git reset [file] — убрать файлы из индекса коммита (изменения не теряются).
git commit --amend — добавить изменения к последнему коммиту.
Работа с ветками
git branch — список всех локальных веток в текущей директории.
git branch [branch-name] — создать новую ветку.
git checkout [branch-name] — переключиться на указанную ветку и обновить рабочую директорию.
git checkout -b <name> <remote>/<branch> — переключиться на удаленную ветку.
git checkout [filename] — вернуть файл в первоначальное состояние если он еще не был добавлен в индекс коммита.
git merge [branch] — соединить изменения в текущей ветке с изменениями из заданной.
git merge --no-ff [branch] — соединить ветки без режима “fast forwarding”.
git branch -a — посмотреть полный список локальных и удаленных веток.
git branch -d [branch] — удалить заданную ветку.
git branch -D [branch] — принудительно удалить заданную ветку, игнорируя ошибки.
git branch -m <oldname> <newname> — переименовать ветку.
Работа с файлами
git rm [file] — удалить файл из рабочей директории и добавить в индекс информацию об удалении.
git rm --cached [file] — удалить файл из репозитория, но сохранить его локально.
git mv [file-original] [file-renamed] — изменить имя файла и добавить в индекс коммита.
Отслеживание файлов
.gitignore — текстовый файл, в котором задаются правила для исключения файлов из репозитория. Например:
git ls-files --other --ignored --exclude-standard — список всех игнорируемых файлов.
Сохранение фрагментов
git stash — положить во временное хранилище все отслеживаемые файлы.
git stash pop — восстановить последние файлы, положенные во временное хранилище.
git stash list — список всех сохраненных изменений во временном хранилище.
git stash drop — удалить последние файлы, положенные во временное хранилище.
Просмотр истории
git log — список изменения текущей ветки.
git log --follow [file] — список изменения текущего файла, включая переименования.
git log --pretty=format:"%h %s" --graph — изменение вида отображения истории изменений.
git log --author='Name' --after= --pretty=oneline --abbrev-commit — посмотреть над чем работал заданный пользователь последнюю неделю.
git log --no-merges master.. — посмотреть историю изменений только для текущей ветки.
git diff [file-branch]..[second-branch] — посмотреть различия между двумя заданными ветками.
git show [commit] — показать метадату и изменения в заданном коммите.
git show [branch]:[file] — посмотреть на файл в другой ветке, не переключаясь на неё.
Отмена коммитов
git reset — убрать изменения из индекса коммита, сами изменения останутся.
git reset [commit/tag] — отменить все коммиты после указанного коммита, изменения будут сохранены локально.
git reset --hard [commit] — принудительно вернутся к указанному коммиту, не сохраняя историю и изменения.
Синхронизация изменений
git fetch [bookmark] — загрузить всю историю с заданного удаленного репозитория.
git merge [bookmark]/[branch] — слить изменения локальной ветки и заданной удаленной.
git push — запушить текущую ветку в удаленную ветку.
git push [remote] [branch] — запушить ветку в указанный репозиторий и удаленную ветку.
git push [bookmark] :[branch] — в удаленном репозитории удалить заданную ветку.
git push -u origin master — если удаленная ветка не установлена как отслеживаемая, то сделать ее такой.
git pull — загрузить историю и изменения удаленной ветки и произвести слияние с текущей веткой.
git pull [remote][branch] — указать конкретную удаленную ветку для слияния.
git remote — посмотреть список доступных удаленных репозиториев.
git remote -v — посмотреть детальный список доступных удаленных репозиториев.
Я ищу простую команду git , которая предоставляет красиво отформатированный список всех файлов, которые были частью фиксации, предоставленной хеш (SHA1), без посторонней информации.
Несмотря на то, что в нем перечислены файлы, он также содержит нежелательную информацию о различиях для каждого.
Есть ли другая команда git , которая предоставит только нужный мне список, чтобы я мог избежать анализа его из git show вывод?
Предпочтительный путь (потому что это команда сантехника ; предназначена для программирования):
Другой способ (менее предпочтителен для сценариев, поскольку это команда фарфор ; предназначена для просмотра пользователем)
- --no-commit-id подавляет вывод идентификатора фиксации.
- Аргумент --pretty задает пустую строку формата, чтобы избежать путаницы в начале.
- Аргумент --name-only показывает только имена файлов, которые были затронуты (спасибо, Хэнк).
- Аргумент -r предназначен для перехода в поддеревья
Если вы хотите получить список измененных файлов:
Если вы хотите получить список всех файлов в коммите, вы можете использовать
Я просто предположу, что gitk для этого не нужен. В этом случае попробуйте git show --name-only <sha> .
Я лично использую комбинацию - stat и - oneline с командой show :
Если вам не нравится /не нужна статистика добавления /удаления, вы можете заменить - stat на - только имя
Недавно мне нужно было перечислить все измененные файлы между двумя коммитами. Поэтому я использовал эту (также * nix-специфическую) команду
Обновление . Или, как указал Этан ниже
Использование --name-status также будет включать изменения (добавленные, измененные, удаленные и т. д.) рядом с каждым файлом
Вы также можете сделать
Введите q, чтобы получить ответ.
git show --stat (hash)
Это легче запомнить, и оно даст вам всю необходимую информацию.
Если вам действительно нужны только имена файлов, вы можете добавить опцию --name-only .
git show --stat --name-only (hash)
Я часто использую псевдоним измененный . Чтобы настроить его:
Подобные команды, которые могут быть полезны:
Использование стандартной команды git diff (также хорошо подходит для сценариев):
Если вы также хотите узнать статус измененных файлов:
Это хорошо работает с коммитами слияния.
ОК, есть несколько способов показать все файлы в конкретном коммите .
Чтобы уменьшить объем информации и показать только имена файлов, которые зафиксировали, вы можете просто добавить --name-only или --name-status flag . эти флаги просто показывают имена файлов, которые отличаются от предыдущих коммитов, как вы хотите .
Таким образом, вы можете выполнить git diff , а затем --name-only с двумя хэшами фиксации после <sha0> <sha1> , что-то вроде ниже:
Я также создаю изображение ниже, чтобы показать все шаги, которые необходимо выполнить в этой ситуации:
Я использую это для получения списка измененных файлов между двумя наборами изменений:
Шпаргалка по консольным командам Git
Git — система контроля версий (файлов). Что-то вроде возможности сохраняться в компьютерных играх (в Git эквивалент игрового сохранения — коммит). Важно: добавление файлов к «сохранению» двухступенчатое: сначала добавляем файл в индекс ( git add ), потом «сохраняем» ( git commit ).
Любой файл в директории существующего репозитория может находиться или не находиться под версионным контролем (отслеживаемые и неотслеживаемые).
Отслеживаемые файлы могут быть в 3-х состояниях: неизменённые, изменённые, проиндексированные (готовые к коммиту).
Ключ к пониманию
Ключ к пониманию концепции git — знание о «трех деревьях»:
- Рабочая директория — файловая система проекта (те файлы, с которыми вы работаете).
- Индекс — список отслеживаемых git-ом файлов и директорий, промежуточное хранилище изменений (редактирование, удаление отслеживаемых файлов).
- Директория .git/ — все данные контроля версий этого проекта (вся история разработки: коммиты, ветки, теги и пр.).
Коммит — «сохранение» (хранит набор изменений, сделанный в рабочей директории с момента предыдущего коммита). Коммит неизменен, его нельзя отредактировать.
У всех коммитов (кроме самого первого) есть один или более родительских коммитов, поскольку коммиты хранят изменения от предыдущих состояний.
Простейший цикл работ
- Редактирование, добавление, удаление файлов (собственно, работа).
- Индексация/добавление файлов в индекс (указание для git какие изменения нужно будет закоммитить).
- Коммит (фиксация изменений).
- Возврат к шагу 1 или отход ко сну.
- HEAD — указатель на текущий коммит или на текущую ветку (то есть, в любом случае, на коммит). Указывает на родителя коммита, который будет создан следующим.
- ORIG_HEAD — указатель на коммит, с которого вы только что переместили HEAD (командой git reset . , например).
- Ветка ( master , develop etc.) — указатель на коммит. При добавлении коммита, указатель ветки перемещается с родительского коммита на новый.
- Теги — простые указатели на коммиты. Не перемещаются.
Перед началом работы нужно выполнить некоторые настройки:
Если вы в Windows:
Указание неотслеживаемых файлов
Файлы и директории, которые не нужно включать в репозиторий, указываются в файле .gitignore . Обычно это устанавливаемые зависимости ( node_modules/ , bower_components/ ), готовая сборка build/ или dist/ и подобные, создаваемые при установке или запуске. Каждый файл или директория указываются с новой строки, возможно использование шаблонов.
Длинный вывод в консоли: Vim
Вызов некоторых консольных команд приводит к необходимости очень длинного вывода в консоль (пример: вывод истории всех изменений в файле командой git log -p fileName.txt ). При этом прямо в консоли запускается редактор Vim. Он работает в нескольких режимах, из которых Вас заинтересуют режим вставки (редактирование текста) и нормальный (командный) режим. Чтобы попасть из Vim обратно в консоль, нужно в командном режиме ввести :q . Переход в командный режим из любого другого: Esc .
Если нужно что-то написать, нажмите i — это переход в режим вставки текста. Если нужно сохранить изменения, перейдите в командный режим и наберите :w .
Git сегодня - это очень популярная система контроля версий. Поэтому шпаргалка по Git, состоящая из основных команд - это то, что может вам пригодиться.
git add
Команда git add добавляет содержимое рабочей директории в индекс (staging area) для последующего коммита. По умолчанию git commit использует лишь этот индекс, так что вы можете использовать git add для сборки слепка вашего следующего коммита.
git status
Команда git status показывает состояния файлов в рабочей директории и индексе: какие файлы изменены, но не добавлены в индекс; какие ожидают коммита в индексе. Вдобавок к этому выводятся подсказки о том, как изменить состояние файлов.
git diff
Команда git diff используется для вычисления разницы между любыми двумя Git деревьями. Это может быть разница между вашей рабочей директорией и индексом (собственно git diff ), разница между индексом и последним коммитом ( git diff --staged ), или между любыми двумя коммитами ( git diff master branchB ).
git difftool
Команда git difftool просто запускает внешнюю утилиту сравнения для показа различий в двух деревьях, на случай если вы хотите использовать что-либо отличное от встроенного просмотрщика git diff .
git commit
Команда git commit берёт все данные, добавленные в индекс с помощью git add , и сохраняет их слепок во внутренней базе данных, а затем сдвигает указатель текущей ветки на этот слепок.
git reset
Команда git reset , как можно догадаться из названия, используется в основном для отмены изменений. Она изменяет указатель HEAD и, опционально, состояние индекса. Также эта команда может изменить файлы в рабочей директории при использовании параметра --hard , что может привести к потере наработок при неправильном использовании, так что убедитесь в серьёзности своих намерений прежде чем использовать его.
git rm
Команда git rm используется в Git для удаления файлов из индекса и рабочей директории. Она похожа на git add с тем лишь исключением, что она удаляет, а не добавляет файлы для следующего коммита.
git mv
Команда git mv — это всего лишь удобный способ переместить файл, а затем выполнить git add для нового файла и git rm для старого.
git clean
Команда git clean используется для удаления мусора из рабочей директории. Это могут быть результаты сборки проекта или файлы конфликтов слияний.
git branch
Команда git branch — это своего рода “менеджер веток”. Она умеет перечислять ваши ветки, создавать новые, удалять и переименовывать их.
git checkout
Команда git checkout используется для переключения веток и выгрузки их содержимого в рабочую директорию.
git merge
Команда git merge используется для слияния одной или нескольких веток в текущую. Затем она устанавливает указатель текущей ветки на результирующий коммит.
git mergetool
Команда git mergetool просто вызывает внешнюю программу слияний, в случае если у вас возникли проблемы слияния.
git log
Команда git log используется для просмотра истории коммитов, начиная с самого свежего и уходя к истокам проекта. По умолчанию, она показывает лишь историю текущей ветки, но может быть настроена на вывод истории других, даже нескольких сразу, веток. Также её можно использовать для просмотра различий между ветками на уровне коммитов.
git stash
Команда git stash используется для временного сохранения всех незакоммиченных изменений для очистки рабочей директории без необходимости коммитить незавершённую работу в новую ветку.
git tag
Команда git tag используется для задания постоянной метки на какой-либо момент в истории проекта. Обычно она используется для релизов.
Не так уж много команд в Git требуют сетевого подключения для своей работы, практически все команды оперируют с локальной копией проекта. Когда вы готовы поделиться своими наработками, всего несколько команд помогут вам работать с удалёнными репозиториями.
git fetch
Команда git fetch связывается с удалённым репозиторием и забирает из него все изменения, которых у вас пока нет и сохраняет их локально.
git pull
Команда git pull работает как комбинация команд git fetch и git merge , т.е. Git вначале забирает изменения из указанного удалённого репозитория, а затем пытается слить их с текущей веткой.
git push
Команда git push используется для установления связи с удалённым репозиторием, вычисления локальных изменений отсутствующих в нём, и собственно их передачи в вышеупомянутый репозиторий. Этой команде нужно право на запись в репозиторий, поэтому она использует аутентификацию.
git remote
Команда git remote служит для управления списком удалённых репозиториев. Она позволяет сохранять длинные URL репозиториев в виде понятных коротких строк, например "origin", так что вам не придётся забивать голову всякой ерундой и набирать её каждый раз для связи с сервером. Вы можете использовать несколько удалённых репозиториев для работы и git remote поможет добавлять, изменять и удалять их.
git archive
Команда git archive используется для упаковки в архив указанных коммитов или всего репозитория.
git submodule
Команда git submodule используется для управления вложенными репозиториями. Например, это могут быть библиотеки или другие, используемые не только в этом проекте ресурсы. У команды submodule есть несколько под-команд — add , update , sync и др. — для управления такими репозиториями.
git show
Команда git show отображает объект в простом и человекопонятном виде. Обычно она используется для просмотра информации о метке или коммите.
git shortlog
Команда git shortlog служит для подведения итогов команды git log . Она принимает практически те же параметры, что и git log , но вместо простого листинга всех коммитов, они будут сгруппированы по автору.
git describe
Команда git describe принимает на вход что угодно, что можно трактовать как коммит (ветку, тег) и выводит более-менее человекочитаемую строку, которая не изменится в будущем для данного коммита. Это может быть использовано как более удобная, но по-прежнему уникальная, замена SHA-1.
В Git есть несколько команд, используемых для нахождения проблем в коде. Это команды для поиска места в истории, где проблема впервые проявилась и собственно виновника этой проблемы.
git bisect
Команда git bisect — это чрезвычайно полезная утилита для поиска коммита в котором впервые проявился баг или проблема с помощью автоматического бинарного поиска.
git blame
Команда git blame выводит перед каждой строкой файла SHA-1 коммита, последний раз менявшего эту строку и автора этого коммита. Это помогает в поисках человека, которому нужно задавать вопросы о проблемном куске кода.
git grep
Команда git grep используется для поиска любой строки или регулярного выражения в любом из файлов вашего проекта, даже в более ранних его версиях.
Если вы только начинаете работать с Git, или переходите на Git с другой СКВ, то такая шпаргалка может вам очень пригодиться.
Читайте также: