Я часто сталкиваюсь со следующей ситуацией:
modified: assembly/main.debug.s
modified: ../src/cd/Config.java
modified: ../src/cd/memoization/cfg/SubgraphFinder.java
modified: ../src/cd/memoization/cfg/SubgraphMap.java
modified: ../src/cd/profiler/Profile.java
modified: ../test/cd/test/TestSamplePrograms.java
modified: ../../notes/20150521.txt
Файлов очень много и у них сложные пути. Их неудобно добавлять из консоли, приходится вручную прописывать сложный путь. Я хотел бы добавлять их по номерам:
git magic-status
1 modified: assembly/main.debug.s
2 modified: ../src/cd/Config.java
3 modified: ../src/cd/memoization/cfg/SubgraphFinder.java
4 modified: ../src/cd/memoization/cfg/SubgraphMap.java
5 modified: ../src/cd/profiler/Profile.java
6 modified: ../test/cd/test/TestSamplePrograms.java
7 modified: ../../notes/20150521.txt
git magic-commit 2,3,5 -m "Простой и удобный способ"
Как можно это сделать?
Для пометки связанных вопросов на разных языках: https://stackoverflow.com/questions/30411901/how-to-add-specific-files-in-git-by-their-number-in-git-status
Это перевод собственного ответа с EN.SO
Ответ
Демонстрационный репозиторий:
Для примеров я использую репозиторий с четырьмя файлами: a, b, c, d.
Из них a - отслеживается, изменен, добавлен (tracked, changed and staged); b отслеживается, изменен, но не добавлен (tracked, changed and not staged); c не отслеживается, но добавлен; d просто ещё не отслеживается.
1. Отдельная утилита: git-number
При запуске без аргументов, git number выполняет обычный git status, добавляя уникальный номер каждой выводимой строке с именем файла. Он "запоминает" соответствие номера файлу.
При запуске с аргументами:
$ git number <любая команда git> [одно или несколько чисел, и/или --аргументов]
git number запускает эту <любую команду>, заменяя все числа соответствующими именами файлов. Нечисловые аргументы передаются в git без изменений.
Пример с командой diff :
2. Отдельная утилита: SCM Breeze
SCM Breeze - это набор shell-скриптов для bash и zsh. Он дает новые возможности работы с Git. Он интегрируется в вашу командную оболочку и добавляет упоминание файла по номеру, индекс репозитория с автодополнением по Tab и многие другие функции.
SCM Breeze использует горячие клавиши и псевдонимы (aliases) команд:
Ctrl + x, c => git_add_and_commit - добавить выбранные файлы и сделать коммит всех добавленных изменений.
Ctrl + x, Space => git_commit_all - сделать коммит всех имеющихся изменений.
git add
$ ga 1
git diff
$ gd 2
git reset
$ grs 3
git commit
$ gco 4
3. "Родными" средствами: git add -i
git add -i
Из Git reference
-i
--interactive
Добавить содержимое рабочей папки в индекс в интерактивном режиме...
Этот режим можно запомнить как -iнтуитивный, поскольку он невероятно понятен и удобен (по крайней мере, для бывалого пользователя Vim). Если не можете выйти из режима добавления, нажмите Return с пустой строкой.
Входим в интерактивный режим:
Добавляем измененный отслеживаемый файл:
Добавляем неотслеживаемый файл:
Смотрим на результат:
Если вам интересно, что это за консоль/цвета/оформление: iTerm2 + zsh + oh-my-zsh
Комментариев нет:
Отправить комментарий