Как узнать, была ли нажата последняя фиксация на мастер?

Я объединил ветку в master, и теперь я вижу, что в моем git log

Прошло некоторое время, и теперь я хочу знать, был ли я ранее также нажал мастер (с этим фиксацией) на удаленный. Как я могу определить, было ли это нажато?

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

fyi это отличается от Как я могу узнать в git, если ветка уже была объединена в master?, поскольку я знаю, что она была объединена, просто дона Не знаю о дистанционном нажатии.

Ответ 1

Do

> git status

Если выход

# On branch master
nothing to commit, working directory clean

Затем вы нажали текущую фиксацию.

Если вывод вместо этого начинается с

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)

Затем у вас есть локальная фиксация, которая еще не была нажата. Вы видите это, потому что удаленная ветвь, origin/master, указывает на фиксацию, которая была последней нажата в начало. Однако ваша ветка ahead of 'origin/master', что означает, что у вас есть локальная фиксация, которая была создана после последнего нажатого фиксации.

Если коммит, который вас интересует, не самый последний, вы можете сделать

> git log --decorate --oneline

чтобы узнать, является ли рассматриваемая сделка до или после фиксации, на которую указывает origin/master.
Если фиксация выполняется после (выше в журнале), чем origin/master, то она не была нажата.

Ответ 2

Если вы сделали несколько коммитов и не уверены, какой из них был удален на удаленный, попробуйте следующее:

git log origin/<remote-branch>..<local-branch>

Пример:

git log origin/master..master

Это будет содержать список всех коммитов в вашей локальной ветки, которые не были перенесены в упомянутую удаленную ветку.

Ответ 3

Решение сделать это программно:

test "$(git rev-parse @{u})" = "$(git rev-parse HEAD)"

Вы также можете проверить, является ли ваш локальный каталог чистым, например, нет измененных незафиксированных файлов:

test -z "$(git status --porcelain)"

Если вы хотите, чтобы ваш скрипт завершал работу, если одно из правил не выполняется, вы можете использовать такой код:

test your_condition || { echo "ERROR: you have local changes"; exit 1; }

Ответ 4

Я предлагаю вам запустить это:

$ git fetch --all
Fetching origin
Fetching upstream

Это позволит получить последние данные из всех пультов.

Затем вы запускаете:

$ git branch -v
  master       ef762af [ahead 3] added attach methods
* testing      4634e21 added -p flag
  upstream     1234567 [ahead 1, behind 7] updated README.md

Это покажет, какие ветки вы впереди или сзади.

Я разместил это, потому что ни один из других ответов не упоминает извлечение удаленных данных, этот шаг имеет решающее значение.

Ответ 5

вы можете использовать git log --graph --all --decorate, он покажет, где находится каждый ref (HEAD, master, origin/master и т.д.)

Ответ 6

Попробуйте это. git branch -r --contains <sha1>

Для фиксации в моем репозитории я вижу, что он существует на ветке удаленного развития

git branch  -r --contains 7914e54ea7e30c7f446e791df66bd3a5805c978a
origin/develop