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 и т.д.