Как узнать, была ли нажата последняя фиксация на мастер?
Я объединил ветку в 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