Просмотр Unpushed Git Commits

Как я могу просмотреть любые локальные коммиты, которые я сделал, которые еще не были перенесены в удаленный репозиторий? Иногда git status будет печатать, что моя ветка X совершает опережение origin/master, но не всегда.

Это ошибка с моей установкой Git, или я что-то не хватает?

+1192
06 янв. '10 в 22:41
источник поделиться
24 ответа
git log origin/master..HEAD

Вы также можете просмотреть diff, используя тот же синтаксис

git diff origin/master..HEAD
+1231
06 янв. '10 в 22:50
источник

Если вы хотите увидеть все фиксации во всех ветвях, которые еще не нажаты, вы можете найти что-то вроде этого:

git log --branches --not --remotes

И если вы хотите видеть только самую последнюю фиксацию в каждой ветки и имена ветвей, это:

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline
+561
26 июл. '10 в 20:36
источник

Вы можете показать все фиксации, которые у вас есть локально, но не вверх по течению с помощью

git log @{u}..

@{u} или @{upstream} означает восходящую ветвь текущей ветки (см. git rev-parse --help или git help revisions).

+238
18 нояб. '11 в 12:19
источник

Вы можете сделать это с помощью git log:

git log origin..

Предполагая, что origin - это имя вашего восходящего потока, оставив любое имя версии после .. означает HEAD, в котором перечислены новые коммиты, которые не были нажаты.

+50
06 янв. '10 в 22:46
источник

Удобный git псевдоним для поиска unpushed коммитов в текущей ветке:

alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

Что это в основном делает:

git log origin/branch..branch

но также определяет текущее имя ветки.

+34
03 мар. '11 в 9:34
источник

Вы можете попробовать...

gitk

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

(Я действительно удивлен, что никто не упомянул об этом до сих пор.)

+24
27 янв. '14 в 21:04
источник

Все остальные ответы говорят о "восходящем потоке" (ветки, из которой вы тянете).
Но локальная ветвь может нажимать на другую ветку, чем та, из которой она извлекается.

master может не нажать на удаленную ветку отслеживания "origin/master".
Вышеупомянутая ветвь для master может быть origin/master, но она может надавить на ветвь удаленного отслеживания origin/xxx или даже anotherUpstreamRepo/yyy.
Они устанавливаются на branch.*.pushremote для текущей ветки вместе с значением global remote.pushDefault.

Это ветка удаленного отслеживания, которая рассчитывается при поиске нечетких коммитов: тот, который отслеживает branch at the remote, где будет нажата локальная ветвь .
branch at the remote может быть снова origin/xxx или даже anotherUpstreamRepo/yyy.

Git 2.5+ (Q2 2015) вводит новый ярлык для этого: <branch>@{push}

См. commit 29bc885, зафиксировать 3dbe9db, commit adfe5d0, commit 48c5847, совершить a1ad0eb, зафиксировать e291c75, commit 979cb24, commit 1ca41a1, commit 3a429d0, совершить a9f9f8c, совершить 8770e6f, commit da66b27, commit f052154, commit 9e3751d, передать ee2499f [все с 21 мая 2015 года] и совершить e41bf35 [01 мая 2015 года] Джефф Кинг (peff).
(слияние Junio ​​C Hamano - gitster - в commit c4a8354, 05 июня 2015 г.)

commit adfe5d0 объясняет:

sha1_name: реализовать @{push} сокращенное

В треугольном рабочем процессе каждая ветвь может иметь две различные точки интереса: @{upstream}, из которой вы обычно извлекаете, и пункт назначения, к которому вы обычно нажимаете. Для последнего нет стенограммы, но полезно иметь.

Например, , вы можете узнать, кто из вас обязуется нажато еще:

git log @{push}..

Или, как более сложный пример, представьте, что вы обычно тянете изменения с origin/master (которые вы устанавливаете как ваш @{upstream}), и нажимаете изменения на свою личную вилку (например, как myfork/topic).
Вы можете нажать на свою вилку с нескольких машин, требуя, чтобы вы интегрировали изменения из пункта назначения push, а не вверх по течению.
С помощью этого патча вы можете просто:

git rebase @{push}

вместо того, чтобы печатать полное имя.

commit 29bc885 добавляет:

for-each-ref: принять формат < <2 →

Так же, как мы имеем "%(upstream)" для сообщения "@{upstream}" для каждого ref, этот патч добавляет "%(push)", чтобы он соответствовал "@{push}".
Он поддерживает те же модификаторы формата отслеживания, что и вверх по течению (потому что , возможно, вам захочется узнать, какие ветки совершают, чтобы нажать).

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

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads
+22
08 июн. '15 в 22:43
источник

Я использую следующий псевдоним, чтобы получить только список файлов (и статус), которые были зафиксированы, но не были нажаты (для текущей ветки)

git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"

то просто выполните:

git unpushed
+18
20 июл. '12 в 19:24
источник

git branch -v будет показывать для каждой локальной ветки "вперед" или нет.

+17
20 июн. '15 в 11:08
источник

Я считаю, что наиболее типичный способ сделать это - запустить что-то вроде:

git cherry --abbrev=7 -v @{upstream}

Однако я лично предпочитаю работать:

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

который показывает коммиты из ветвей all, которые не объединены вверх по течению, плюс последняя фиксация в восходящем потоке (которая отображается как корень node для всех остальных коммитов). Я использую его так часто, что создал для него псевдоним noup.

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'
+10
09 февр. '12 в 11:37
источник

Я предлагаю вам перейти к script https://github.com/badele/gitcheck, я закодировал этот script для проверки за один проход всех ваших git репозиториев, и он показывает, кто не совершил и кто не нажал/вытащил.

Здесь приведен пример результата enter image description here

+7
27 апр. '13 в 12:27
источник
git cherry -v

Здесь будет отображаться ваша локальная история комментариев (еще не нажата) с соответствующим сообщением

+6
11 мар. '15 в 18:48
источник

Это не ошибка. Вероятно, вы видите статус git после неудачного автоматического слияния, когда изменения с удаленного пользователя извлекаются, но еще не объединены.

Чтобы увидеть фиксации между локальным репо и удаленным, сделайте следующее:

git fetch

Это безопасно на 100% и не будет макетировать вашу рабочую копию. Если были изменения git status wil show X commits ahead of origin/master.

Теперь вы можете показать журнал коммитов, находящихся в удаленном, но не локальном:

git log HEAD..origin
+6
06 янв. '10 в 22:47
источник

Существует инструмент с именем unpushed, который сканирует все репозитории Git, Mercurial и Subversion в указанном рабочем каталоге и отображает список файлов с ucommite и нечеткие коммиты. Установка проста в Linux:

$ easy_install --user unpushed

или

$ sudo easy_install unpushed

для установки в системном масштабе.

Использование тоже просто:

$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)

Подробнее см. unpushed --help или официальное описание. Он также имеет cronjob script unpushed-notify для экранного уведомления о неуправляемых и нераспределенных изменениях.

+6
26 апр. '12 в 18:04
источник

Это помогло мне лучше:

git log --oneline @{upstream}..

или

git log --oneline origin/(remotebranch)..
+4
17 июн. '15 в 18:20
источник

Аналогично: для просмотра несвязанных ветвей:

git branch --all --no-merged

Это могут быть подозрения, но я рекомендую ответ cxreg

+2
31 мар. '15 в 14:01
источник

Чтобы перечислить все нефиксированные commit во всех ветвях, вы можете использовать эту команду:

 git log --branches  @{u}..
+2
20 мая '15 в 8:59
источник

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

$ git checkout

git отвечает, сообщая вам, что вы "опережаете N совершает" относительно вашего происхождения. Поэтому теперь просто учитывайте это число при просмотре журналов. Если вы "впереди на 3 коммиты", верхние 3 записи в истории по-прежнему остаются закрытыми.

+2
01 мая '14 в 19:49
источник

Один из способов сделать вещи - перечислить коммиты, доступные в одной ветки, но не другие.

git log ^origin/master master
0
04 нояб. '15 в 13:18
источник

У меня была сделанная ранее попытка, не нажата ни на одну ветку, ни на удаленную, ни на локальную. Просто коммит. Ничто из других ответов не помогло мне, но с: git reflog Там я нашел свою фиксацию.

0
17 мар. '17 в 11:40
источник

Здесь мое портативное решение (оболочка script, которая работает на Windows тоже без дополнительной установки), которая показывает различия от источника для всех ветвей: git-fetch-log

Пример вывода:

==== branch [behind 1]

> commit 652b883 (origin/branch)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-10 09:11:11 +0100
|
|     Commit on remote
|
o commit 2304667 (branch)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-08-28 13:21:13 +0200

      Commit on local

==== master [ahead 1]

< commit 280ccf8 (master)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 21:42:55 +0100
|
|     Commit on local
|
o commit 2369465 (origin/master, origin/HEAD)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2016-03-10 09:02:52 +0100

      Commit on remote

==== test [ahead 1, behind 1]

< commit 83a3161 (test)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 22:50:00 +0100
|
|     Diverged from remote
|
| > commit 4aafec7 (origin/test)
|/  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
|   Date:   2016-03-14 10:34:28 +0100
|
|       Pushed remote
|
o commit 0fccef3
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-09-03 10:33:39 +0200

      Last common commit

Параметры, переданные для журнала, например. --oneline или --patch.

0
25 мая '17 в 6:45
источник
git show

отобразит все различия в ваших локальных коммитах.

git show --name-only

отобразит локальный идентификатор фиксации и имя фиксации.

-2
25 апр. '14 в 6:02
источник
git diff origin

Предполагая, что ваша ветка настроена для отслеживания начала координат, это должно показать вам различия.

git log origin

Дает вам краткое изложение коммитов.

-3
06 янв. '10 в 22:46
источник

Посмотрите другие вопросы по меткам или Задайте вопрос