Aqui estão duas perguntas diferentes, mas acho que elas estão relacionadas.
Ao usar o Git, como localizo quais alterações foram confirmadas localmente, mas ainda não foram enviadas para uma ramificação remota? Estou procurando algo semelhante ao comando Mercurial
hg outgoing
.Ao usar o Git, como encontro as alterações que uma ramificação remota tem antes de fazer um pull? Estou procurando algo semelhante ao comando Mercurial
hg incoming
.
Para o segundo: existe uma maneira de ver o que está disponível e depois escolher as mudanças que eu quero fazer?
hg incoming
ehg outgoing
realmente fazer. O equivalente mais próximo ao Git que encontrei é a--dry-run
opção. Apenasgit pull --dry-run
e você verá uma lista de todas as coisas que precisam acontecer.Respostas:
O Git não pode enviar esse tipo de informação pela rede, como o Hg pode. Mas você pode executar
git fetch
(o que é mais dohg pull
que issohg fetch
) para buscar novas confirmações nos seus servidores remotos.Portanto, se você tiver uma ramificação chamada
master
e um remoto chamadoorigin
, após a execuçãogit fetch
, também deverá ter uma ramificação chamadaorigin/master
. Você pode obtergit log
todos os commits quemaster
precisam ser um superconjuntoorigin/master
fazendogit log master..origin/master
. Inverta esses dois para obter o oposto.Um amigo meu, David Dollar, criou alguns scripts git shell para simular
hg incoming/outgoing
. Você pode encontrá-los em http://github.com/ddollar/git-utils .fonte
A partir do Git 1.7.0, existe uma sintaxe especial que permite que você consulte genericamente a ramificação upstream:
@{u}
ou@{upstream}
.Para imitar
hg incoming
:Para imitar
hg outgoing
:Eu uso o seguinte
incoming
e osoutgoing
aliases para facilitar o uso acima:fonte
git branch --set-upstream foo origin/foo
.git log @{u}..
lista todas as alterações no repositório para mim. Não há como eles ainda não existirem.git rev-parse --symbolic-full-name @{u}
imprime a referência remota apropriada. Além disso,git log @{u}..
mostra as confirmações que não são acessíveis pela ramificação upstream, que podem incluir confirmações que já estão no repositório remoto (se elas puderem ser acessadas por uma referência diferente). Isso acontecerá logo após a mesclagem em uma ramificação já enviada.checkout <somebranch>
emerge <otherbranch>
. Neste ponto, eu fizlog @{u}..
e vi todas as alterações listadas.Não é uma resposta completa, mas o git fetch puxará o repositório remoto e não fará uma mesclagem. Você pode então fazer uma
fonte
git diff origin/master master
Use "origem do log git .. HEAD"
Use "git fetch" seguido de "git log HEAD..origin". Você pode escolher confirmações individuais usando os IDs de confirmação listados.
O exposto acima pressupõe, é claro, que "origem" é o nome da sua ramificação de rastreamento remoto (que é se você usou o clone com opções padrão).
fonte
Há também isso, para comparar todos os ramos:
Isto é o que a página de manual do git log diz sobre isso:
O acima é para
outgoing
. Paraincoming
, apenas troque:fonte
eu faria
para
hg incoming
epara
hg outgoing
.fonte
O git-out é um script que simula com
hg outgoing
bastante precisão. Ele analisa a saída "push-n" e, portanto, produz uma saída precisa se você precisar especificar argumentos adicionais a serem enviados.fonte
git de entrada
git de saída
fonte
Quando as respostas "git log" e @ {u} inicialmente me deram erros de "revisão desconhecida", experimentei a sugestão de Chris / romkyns de
git push --dry-run
.Você obterá uma saída como "5905..4878 master-> master". 5905 é a confirmação mais recente que o controle remoto tem e confirma através (e incluindo) 4878 será aplicada ao controle remoto.
Você pode usar 5905..4878 como argumentos para vários outros comandos git para obter mais detalhes:
fonte
Quando você faz o git fetch, todo o conteúdo, incluindo branches, tags (refs), é armazenado temporariamente em .git / FETCH_HEAD, cujo conteúdo pode ser visualizado com o comando: git log FETCH_HEAD Se você não usar o sufixo -a com o git fetch, por padrão , O conteúdo de FETCH_HEAD será substituído por novos conteúdos. A partir desses conteúdos, é possível visualizar e decidir em qual ramificação você deseja mesclá-los, se desejar, ou você pode escolher facilmente se deseja apenas algumas confirmações do que foi trazido pela busca.
fonte