Git Сравнение файлов перед фиксацией

Есть ли функциональность в git, где я мог бы сравнивать свои локальные файлы с исходным элементом git до совершения изменений?

Ответы

Ответ 1

Конечно, вы можете сделать.

  • Использование команды git diff без каких-либо аргументов: будет сравнивать все измененные файлы в вашей файловой системе с файлами в текущем теге ветки (или).

  • Использование git diff <tag(or)branch name>: будет сравнивать все измененные файлы в вашей файловой системе с файлами в указанном теге ветки (или).

  • Использование git diff <path/to/file_name (or) path/to/folder>: сравнивает указанный файл или файлы в папке в вашей файловой системе с текущим тегом ветки (или).

  • Использование git diff <tag1(or)branch1 name> <tag2(or)branch2 name>: будет сравнивать все измененные файлы между двумя ветвями/тегами.

Есть много вариантов, вы можете перейти к команде git diff 'для форматирования вывода. Здесь я перечислил несколько:

  • git diff --name-only: Показывать только имена измененных файлов, а не содержимого.
  • git diff --name-status: Показывать только имена и статус измененных файлов.
  • git diff --cached (or --staged): сравнивает только файлы, которые ставятся/индексируются.

для получения дополнительной информации: выполните git diff --help в git bash.

FYI: git diff будет генерировать вывод в командной строке. Если вы хотите увидеть результат в некоторых визуальных инструментах, используйте git difftool.

Используя git difftool: вы можете настроить git на использование инструмента diff/merge для сравнения файлов. Оформить эту ссылку: использовать Winmerge внутри git для файла diff

Вы можете передать все аргументы и параметры git diff на git difftool.

Ответ 2

Мне нравится использовать

git status

Он покажет вам, какие файлы были изменены и что вы отслеживаете. Затем вы можете использовать

git diff

или больше GUI-friendly

gitk

Чтобы увидеть diff.

Ответ 3

Я предпочитаю использовать этот метод.

A script для сравнения

    #!/bin/sh
(                              # execute in a subshell so you can continue
                               #   working in the current shell
    set -o xtrace              # bash setting that echos each command before it executed
    > /tmp/auto_bcompare_log   # truncate existing log file
    BCOMP_PATH=/usr/bin/bcompare
    BRANCH="$1"                # get branch argument from command line
    TEMPDIR=`mktemp -d`        # get a temp directory
    CWD=`pwd`                  # remember the current directory
    git clone $CWD $TEMPDIR
    cd $TEMPDIR
    git checkout $BRANCH
    cd $CWD
    $BCOMP_PATH $CWD $TEMPDIR
    rm -rf $TEMPDIR
) >> /tmp/auto_bcompare_log 2>&1 < /dev/null & # background and redirect
                                               # stdout/stderr/stdin

Вышеупомянутый script определенно не написан мной. Я взял его из сети, но не уверен в источниках. Сохраните это в своем репо как compare.sh. Убедитесь, что вы указали правильный путь для файла bcompare.

Для сравнения перед фиксацией.

./compare.sh <branch_you_want_to_compare>

Что это значит в этом script, так это то, что он проверяет ветвь, которую вы указываете в качестве параметра в каталоге temp, и открывает для сравнения с вашим pwd. С этим вы можете просмотреть свои изменения до совершения. Надеюсь, это то, что вы хотите.

Ответ 4

Так как коммиты легко изменить или изменить, прежде чем они будут нажаты, мне будет легче зафиксировать, а затем в журнале, чтобы увидеть, что я изменил.

Если это не то, что я ожидаю, измените, reset, rebase -i и т.д.