O que a “sincronização” do GitHub para Windows faz?

87

Com o GitHub para Windows, você pode "publicar" um branch e, em seguida, "sincronizar" esse branch com o GitHub.

insira a descrição da imagem aqui

A sincronização é basicamente um git pulle git push? Ou há algo mais? Se eu quiser realizar exatamente as mesmas etapas de "sincronizar" na linha de comando, o que devo fazer?

(Não é código aberto, ou eu acabei de ler isso.)

Jay Bazuzi
fonte

Respostas:

52

Sync sim git pull --rebasee, se houver mudanças locais, ele faz git push.

A partir daqui: http://haacked.com/archive/2012/05/21/introducing-github-for-windows.aspx#87318

Matt Rix
fonte
2
O que acontece se houver um conflito durante a etapa de rebase?
Svante
26
@Svante simplesmente falha e se oferece para abrir um shell para você resolver a bagunça. Foi assim que cheguei a esta página :-)
Andiih
8
Isso ainda é verdade? Acabei de fazer uma sincronização e acabei com um commit de mesclagem, que nunca deveria acontecer se o fluxo for: git pull --rebase; git push
Micah Zoltu de
Alguma explicação para o comentário de @Michas Caldwell, acredito que ele tenha razão?
benchuk
Pode confirmar se bater em Sync agora fez um em git pullvez de um git pull --rebase, criando assim um branch adicional Merge 'master' de ... commit.
Leo,
42

Como a resposta acima foi há mais de dois anos, uma resposta atualizada para esta pergunta é: devido a alguns bugs com rebase , o botão "sincronizar" não funciona git pull --rebasemais. Em vez disso, ele faz git pullo que irá fazer merge se houver conflitos, de acordo com este notas de lançamento (ver comunicado 1.3.0).

O link acima não está disponível no momento. Aqui estão as novas notas de lançamento .

Ethan Yang
fonte
2
Na verdade, isso não é totalmente verdade. SOMENTE se um rebase não funcionar, ele tenta fazer uma fusão.
Joris Meys
O link das notas de lançamento está quebrado.
skolima
2
@JorisMeys Não tenho certeza se sua afirmação é verdadeira. Na minha experiência, se houver algum commit antes do meu remotamente, ele criará um merge commit, mesmo quando puder fazer um rebase.
Jerad Rose
@JeradRose Quando escrevi meu comentário, estávamos no Github Desktop v. 2.x, e agora estamos no 3.3 :-) Mas você está certo, notei o mesmo.
Joris Meys
17

"Sincronizar" seria qualquer ação necessária para que sua filial local correspondesse à sua filial remota. Se seu branch local tinha commits que seu branch remoto não tinha, então "sync" iria empurrar seu branch. Se o branch remoto estava à frente do seu branch local, então "sync" puxaria primeiro (especificamente git pull --rebase, como foi explicado por Phil Haack). "Sincronizar" é apenas um atalho para fazer com que o local e o remoto se espelhem.

No site GitHub :

The sync button turns the complex workflow of pulling and pushing into a single operation. It notifies you when there are new changes to pull down and lets you quickly share local changes.

redhotvengeance
fonte
Ele não apenas puxa - ele faz "git pull --rebase", que é uma diferença crucial. Além disso, a ordem que você tem está errada, puxe antes de empurrar.
Andiih
2
@Andiih Minha linguagem foi generalizada e não uma lista ordenada de operações. O pedido estava implícito - observe que digo "se a filial remota estivesse à frente da sua filial local"? Minha descrição também foi uma citação direta do site GitHub. Independentemente disso, a resposta de Matt Rix é mais detalhada e merece ser marcada como a resposta. Fiz algumas pequenas edições para esclarecer qualquer confusão em minha resposta.
redhotvengeance
O github sync também busca alterações upstream, além da origem. Ou seja, eu procurei um repo e tenho um clone local do fork, o que eu realmente quero são as mudanças do upstream, não apenas da origem
AaronLS
1
@AaronLS GitHub para Windows foi criado para funcionar apenas com um controle remoto no momento, a saber origin. Para trabalhar com vários controles remotos, você terá que usar a linha de comando. Informações relevantes podem ser encontradas aqui , em "Vários controles remotos Git e não GitHub".
redhotvengeance
4

Para adicionar à resposta de @ethanyang ,

De acordo com o alias configurado no gitconfig,

[alias]
...
sync = !git pull && git push
Ashwin Sinha
fonte
4
Só por curiosidade, o que o! significa na linha acima?
Scott Romack
@ScottRomack significa que é tratado como um comando shell: stackoverflow.com/questions/21083933/…
Nicolas Holthaus
O GitHub Desktop já tem esse alias configurado? Em caso afirmativo, onde esta configuração está localizada? Não vi esse alias no meu global .gitconfig. Ou isso é apenas uma substituição sua?
James