Как я могу просмотреть любые локальные коммиты, которые я сделал, которые еще не были отправлены в удаленный репозиторий? Изредка git status
будет распечатываться, что моя ветка на X коммитов опережает origin/master
, но не всегда.
Это ошибка с моей установкой Git или я что-то упустил?
git log @{push}..
. Посмотрите на этот новый ярлык@{push}
(ссылаясь на ветку удаленного отслеживания, на которую вы нажимаете) в моем ответе нижеgit status --all
должен был появиться в 2010 году; илиgit status -v
должен фактически предоставить подробный вывод, который включает дополнительную информацию.Ответы:
Вы также можете просматривать различия, используя тот же синтаксис
источник
git config --global alias.ahead "log origin/master..HEAD --oneline"
чтобы я мог быстро выяснить, где я нахожусь. Еще больше конфет:for i in *; do echo $i && git ahead 2>/dev/null; done
git log --stat origin/master..HEAD
для немного дополнительной удивительности@{u}
синтаксис еще не был доступен, он стал доступен только 12 февраля 2010 года . Кроме того,@{u}
не будет работать, если локальная ветвь не настроена с восходящим потоком. Наконец, в@{u}
настоящее время нет поддержки завершения вкладок,<remote>/<branch>
поскольку заполнение вкладок остается одним из самых быстрых способов получения этой информации, и оно будет работать независимо от того, настроен ли восходящий поток или нет.Если вы хотите увидеть все коммиты во всех ветвях, которые еще не выдвинуты, вы можете искать что-то вроде этого:
И если вы хотите видеть только самый последний коммит в каждой ветви и имена веток, это:
источник
git log master..HEAD
не сработал бы, так как было несколько апстримов. Этот пост привел меня к тому,git log MyBranch --not --remotes
чтобы показать все коммиты, которые не были переданы ни одному восходящему каналу в одной ветке.--decorate
показывает ветви также.--graph
делает это еще более очевидным.Вы можете показать все коммиты, которые у вас есть локально, но не вверх по течению
@{u}
или@{upstream}
означает восходящую ветвь текущей ветки (см.git rev-parse --help
илиgit help revisions
для деталей).источник
git log @{u}.. -p
Одним из наиболее полезных параметров является -p , который показывает различия, вносимые в каждое подтверждение.Это сработало для меня:
Как указано в Git: смотрите все нефиксированные коммиты или коммиты, которых нет в другой ветке .
источник
Вы можете сделать это с
git log
:Предполагая, что
origin
это имя вашего апстрима, исключая любое имя ревизии после..
подразумеваемогоHEAD
, в котором перечислены новые коммиты, которые не были переданы.источник
git log
"2-dots-not-3", он всегда напоминает мне stackoverflow.com/questions/53569/… ;)git branch --set-upstream master origin/<branch>
для настройки upstream, если вы склонны использовать эту команду для просмотра коммитов, которые находятся в стадии постановки.Все остальные ответы говорят о «восходящем» (ветке, из которой вы тянете).
Но местное отделение может подтолкнуть к другому ветви , чем тот , что вытягивает из.
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+ (второй квартал 2015 года) представляет новый ярлык для этого:
<branch>@{push}
См. Коммит 29bc885 , коммит 3dbe9db , коммит adfe5d0 , коммит 48c5847 , коммит a1ad0eb , коммит e291c75 , коммит 979cb24 , коммит 1ca41a1 , коммит 3a429d0 , коммит a9f9f8c , коммит 8770e6f , коммит da66b27 , коммит f052151f , коммит f052151 , коммит 9 ee все от 9 коммитов 2015] и передайте e41bf35 [01 мая 2015] Джеффом Кингом (
peff
) .(Объединено Джунио С Хамано -
gitster
-в коммит c4a8354 , 05 июня 2015 г.)Коммит adfe5d0 объясняет:
Commit 29bc885 добавляет:
Если вы хотите увидеть, сколько коммитов ваши локальные ветви опережают / отстают по сравнению с веткой, на которую вы нажимаете:
источник
Удобный псевдоним git для поиска неотжатых коммитов в текущей ветке:
Что это в основном делает:
но также определяет текущее имя ветви.
источник
git alias <alias-name> <command>
в этом случае команда должна быть заключена в одинарные кавычки, чтобы экранировать специальные символы из оболочки.git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'
Вы могли бы попробовать ....
Я знаю, что это не просто опция командной строки, но если вы установили ее и используете систему с графическим интерфейсом, это отличный способ увидеть именно то, что вы ищете, а также многое другое.
(Я на самом деле немного удивлен, что никто не упомянул об этом.)
источник
gitk --all
для просмотра всех веток.tig
это альтернатива ncurses.gitk
это круто! Никогда не знал, что это существует! Удобно просматривать изменения в хорошем интерфейсе.tig
наиболее полезен в ситуации «только терминал» - когда вы не получаете доступ к графическому интерфейсу рабочего стола. Узнав об этом в первый раз! ИНТЕРЕСНО:tig
ОБРАТНОgit
!git branch -v
покажет, для каждой локальной ветви, "впереди" или нет.источник
devel
, соответствующая строка будет* devel 8a12fc0 [ahead 1] commit msg
(*
будет только на строке, соответствующей извлеченной ветке).ahead 1
означает «вперед на один коммит», т. е. есть один не выдвинутый коммит.git branch -vv
? Ср docs: «Если указано дважды, выведите также имя вышестоящей ветви (см. также git remote show <remote>)».behind
и / илиahead
для каждой локальной ветви, что достаточно для решения проблемы OP (обнаружение невыполненных коммитов).git branch -v
будет достаточно для того, только что протестировал снова с Git 2.16.2 :)Я сделал коммит ранее, ни в какую ветку, ни в удаленную, ни в локальную. Просто коммит. Ничто из других ответов не сработало для меня, но с:
Там я нашел свой коммит.
источник
Я использую следующий псевдоним, чтобы получить только список файлов (и статус), которые были зафиксированы, но не были переданы (для текущей ветви)
тогда просто сделайте:
источник
Я считаю, что наиболее типичный способ сделать это - запустить что-то вроде:
Однако лично я предпочитаю бегать:
который показывает коммиты из всех ветвей, которые не объединены в восходящем направлении, плюс последний коммит в восходящем направлении (который отображается как корневой узел для всех остальных коммитов). Я использую его так часто, что создал
noup
для него псевдоним .источник
Я предлагаю вам посмотреть скрипт https://github.com/badele/gitcheck , я написал этот скрипт для проверки за один проход всех ваших репозиториев git, и он покажет, кто не зафиксировал, а кто не нажал / потянул.
Вот пример результата
источник
Это перечислит вашу локальную историю комментариев (еще не выдвинутую) с соответствующим сообщением
источник
Это не ошибка. Вероятно, вы видите состояние git после неудачного автоматического слияния, когда изменения с пульта извлекаются, но еще не слиты.
Чтобы увидеть коммиты между локальным репо и удаленным, сделайте это:
Это на 100% безопасно и не копирует вашу рабочую копию. Если будут изменения,
git status
покажуX commits ahead of origin/master
.Теперь вы можете показать журнал коммитов, которые находятся в удаленном, но не в локальном:
источник
Это работало лучше для меня:
или:
источник
@{upstream}
буквально (upstream
это волшебное слово), аremotebranch
это просто название вашей ветви.Существует инструмент с именем unpressed, который сканирует все репозитории Git, Mercurial и Subversion в указанном рабочем каталоге и отображает список файлов с незафиксированными файлами и фиксаций без изменений. Установка под Linux проста:
или
установить в масштабе всей системы.
Использование тоже просто:
Смотрите
unpushed --help
или официальное описание для получения дополнительной информации. Он также имеет скрипт cronjobunpushed-notify
для уведомления на экране о незафиксированных и невыпущенных изменениях.источник
Чтобы легко перечислить все unpressed commit во всех ветках, вы можете использовать эту команду:
источник
Аналогично: Для просмотра неотделенных веток:
Это может быть подозрительно, но я рекомендую ответ cxreg
источник
Если число коммитов, которые не были выдвинуты, представляет собой однозначное число, которое часто бывает, самый простой способ:
Git отвечает, говоря вам, что вы «впереди N коммитов» относительно вашего происхождения. Так что теперь просто помните это число при просмотре логов. Если вы «впереди 3 коммитов», топ-3 коммитов в истории остаются приватными.
источник
Один из способов сделать это - перечислить коммиты, которые доступны в одной ветви, но не в другой.
источник
Как сказано выше:
git diff origin / master..HEAD
Но если вы используете GIT GUI
После открытия графического интерфейса выберите «Репозиторий» -> Под этим « Визуализировать историю »
Примечание: некоторые люди любят использовать CMD Prompt / Terminal, а некоторые любят использовать Git GUI (для простоты)
источник
Вот мое портативное решение (сценарий оболочки, который также работает в Windows без дополнительной установки), которое показывает отличия от источника для всех веток: git-fetch-log
Пример вывода:
Параметры, передаваемые для журнала, например,
--oneline
или--patch
могут быть использованы.источник
покажет все различия в ваших локальных коммитах.
покажет локальный идентификатор коммита и имя коммита.
источник
git show
показывает только самый последний коммит, независимо от того, был ли он передан на удаленный компьютер или нет, он не покажет вам все ваши невыпущенные коммиты.Предполагая, что ваша ветка настроена на отслеживание источника, тогда это должно показать вам различия.
Даст вам сводку коммитов.
источник
git log origin
покажет вам коммиты, которые уже были переданы , но это не покажет коммиты, которые не были переданы , что больше соответствует тому, о чем просил оригинальный постер.