#git #tags #diff #git-checkout
#git #Теги #разница #git-checkout
Вопрос:
Мне просто интересно, есть ли какой-то тег или параметр, который мы можем предоставить
git checkout tags/{tag_name}
вызов, который обеспечит вывод, аналогичный обычному git pull
. Я просто ищу одну команду для выполнения сравнения текущей редакции с кодом, указанным в новом теге.
Я уверен, что смогу создать скрипт bash, чтобы сделать это в два этапа, но мне было интересно, есть ли способ, уже являющийся частью Git, сделать это.
Если нет, то был бы совет получить этот diff (до или после выполнения проверки)? Если я не смогу сделать это в одной строке с помощью Git, я напишу свой собственный скрипт для этого.
Ответ №1:
Вывод, следующий за a git pull
, на самом деле является выводом по умолчанию для git merge
, поскольку pull — это просто выборка, за которой следует слияние. Вот пример:
$ git pull origin master
From c:/Users/Keoki/Documents/GitHub/bare
* branch master -> FETCH_HEAD
Merge made by the 'recursive' strategy.
hello.txt | 1
1 file changed, 1 insertion( )
create mode 100644 hello.txt
$ git reset --hard head^
HEAD is now at 53c0907 Revert "Change `git diff` meta color to cyan (OS X)"
$ git merge origin/master
Merge made by the 'recursive' strategy.
hello.txt | 1
1 file changed, 1 insertion( )
create mode 100644 hello.txt
Итак, вы видите сверху, вывод, известный как «diff stat», на самом деле является частью обычного mege в Git.
Получение вывода статистики различий
Нет никаких вариантов для получения вывода статистики различий git checkout
. Однако вы можете получить тот же результат, используя git diff --stat
.
Чтобы получить статистику перед переключением с ветки, тега или фиксации X на другую ветку, тег или фиксацию Y, просто используйте
git diff --stat X Y
Вы можете сделать это до или после проверки Y, поскольку git diff
в этом случае ничего не меняется в вашей текущей рабочей копии.
Документация
Согласно официальной странице руководства git-merge (1), переменная конфигурации merge.stat
управляет
Следует ли печатать diffstat между ORIG_HEAD и результатом слияния в конце слияния. По умолчанию True.
Смотрите также
Комментарии:
1. Последний последующий вопрос: если я хочу выполнить git diff -stat X Y, тогда мне нужно знать текущую ветку или тег. Я знаю, что git status показывает нам это, но он говорит нам и о многих других вещах. Есть ли команда для получения текущей ветки или тега, и это единственный ответ? Или мне нужно проанализировать ответ команды git status? Еще раз спасибо!
2. @swafo какую версию Git вы используете?
git --version
? Кроме того, зачем вам нужна текущая ветка, если вы собираетесь делатьgit diff --stat X Y
? Кроме того, у вас еще не настроена командная строка для отображения текущей ветки?3. Я пытаюсь создать инструмент командной строки, чтобы обеспечить более безопасный запуск в производство. Мы (почти всегда) используем теги для выпуска нового кода. Это означает, что у нас будет текущий код с любым именем тега. В конце концов я нашел то, что искал:
git rev-parse --abbrev-ref HEAD
получить текущее имя ветки иgit name-rev --tags --name-only HEAD
получить текущий тег. Таким образом, я могу выполнить вызов типа:pushcode {tagname}
и заставить его автоматически определять текущую ветку / тег и запускать diff —stat для этих двух, прежде чем фактически выполнять обновление кода.