Получите «тег проверки git» для получения того же результата, что и список различий «git pull»

#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 для этих двух, прежде чем фактически выполнять обновление кода.