Список измененных файлов git, исключая то, что изменилось в родительской ветке

Я хочу снабдить свой линтер файлами, которые были изменены в моей ветке. Список должен включать:

  • файлы, зафиксированные в моей ветке, поскольку они разветвлены от своего родителя
  • файлы изменены и поставлены
  • файлы изменены, но еще не проиндексированы

Он не должен включать файлы, которые были изменены в родительской ветке после изменения. Таким образом, если в моей ветке нет последних коммитов из родительской ветки, это не имеет значения.

Что я пробовал до сих пор:

  1. git diff --name-only дает только то, что изменено, но не зафиксировано/не поставлено
  2. git diff --name-only --staged дает только то, что поставлено, но не зафиксировано/изменено
  3. git diff --name-only main... дает только то, что зафиксировано, но не изменено/не поставлено
  4. git diff --name-only main дает все (зафиксировано/поставлено/изменено), но также включает в себя то, что изменилось в main

В каком-то смысле у меня уже есть список, если я объединил вывод 1, 2 и 3. Но было бы неплохо иметь одну команду. Есть ли что-то подобное?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ты так близко. git diff main...определяется как

git diff A...B эквивалентно git diff $(git merge-base A B) B

и вы не хотите, чтобы оно сравнивалось со вторым советом, с вашей текущей извлеченной фиксацией, вам нужно сравнение по умолчанию с рабочим деревом, поэтому вы хотите оставить там последний B.

git diff $(git merge-base main @)

Что вас может сбить с толку, так это то, что в выражениях ревизии отсутствующее имя ревизии обычно по умолчанию имеет значение HEAD, то есть @, тогда как в списке аргументов команды отсутствующий аргумент, который не обязательно является именем ревизии, по умолчанию не имеет значения HEAD. Поэтому, когда вы говорите main..., он использует HEAD в качестве версии B выше.

Бонусные баллы, если вы определите псевдоним, позволяющий запускать его как простую команду Git, например. git branchdiff

knittl 14.07.2024 14:04

@knittl Хорошая идея, за исключением, может быть, выбора имени. :) Это не ветка, с которой ОП хочет сравниться, это рабочее дерево. Основная проблема здесь в том, что невозможно назвать «рабочее дерево» объектом команды diff; это может быть только подразумеваемым. Это похоже на дырку в языке.

matt 14.07.2024 19:26

@matt да, имя абсолютно дерьмовое, но я сразу не смог придумать лучшего. difffeature, diff-merge-base, changes, …

knittl 14.07.2024 20:09

Спасибо! И действительно, такое ощущение, что в git не хватает функций, которые сделали бы это менее очевидным.

Lode 15.07.2024 09:45

Другие вопросы по теме