o git fetch
transferências de comandos commits, ficheiros e refs de um repositório remoto para o seu repo local. Buscar é o que você faz quando você quer ver o que todos os outros têm trabalhado. É semelhante a svn update
na medida em que permite ver como o histórico central progrediu, mas não o obriga a realmente fundir as alterações no seu repositório. O Git isola o conteúdo obtido do conteúdo local existente; não tem qualquer efeito no seu trabalho de desenvolvimento local., O conteúdo obtido tem de ser verificado explicitamente com o comando git checkout
. Isto torna a obtenção de uma forma segura de rever commits antes de integrá-los com o seu repositório local.
Ao descarregar o conteúdo de um acordo de recompra remoto, os comandos git pull
e git fetch
estão disponíveis para realizar a tarefa. Você pode considerar git fetch
a versão ‘segura’ dos dois comandos. Ele irá baixar o conteúdo remoto, mas não atualizar o estado de trabalho do seu repo local, deixando o seu trabalho atual intacto., git pull
é a alternativa mais agressiva; irá transferir o conteúdo remoto para o ramo local activo e executar imediatamente git merge
para criar um commit de junção para o novo conteúdo remoto. Se tiver alterações pendentes em progresso, isto irá causar conflitos e iniciar o fluxo de resolução de conflitos da junção.
como o git fetch funciona com ramificações remotas
para entender melhor como git fetch
funciona vamos discutir como o Git organiza e armazena commits., Nos bastidores, no diretório do repositório ./.git/objects
, O Git armazena todos os commits, locais e remotos. Git mantém o branch remoto e local commits distintamente separados através do uso de refs branch. Os refs para ramos locais são armazenados no ./.git/refs/heads/
. Executando o comando git branch
irá enviar uma lista dos refs do ramo local. O seguinte é um exemplo degit branch
saída com alguns nomes de ramificação demo.,
git branch
master
feature1
debug2
examinando o conteúdo do directório revelaria resultados semelhantes.
ls ./.git/refs/heads/
master
feature1
debug2
ramificações remotas são exatamente como ramificações locais, exceto que mapeiam commits do repositório de outra pessoa. Os ramos remotos são prefixados pelo remoto a que pertencem para que não os misture com os ramos locais. Como os ramos locais, O Git também tem refs para os ramos remotos. Remote branch refs live in the ./.git/refs/remotes/
directory., O próximo excerto de código de exemplo mostra os ramos que poderá ver depois de obter um repo remoto convenientemente chamado remote-repo:
git branch -r
# origin/master
# origin/feature1
# origin/debug2
# remote-repo/master
# remote-repo/other-feature
este resultado mostra os ramos locais que já tínhamos examinado, mas agora mostra-os prefixados comorigin/
. Além disso, agora vemos os ramos remotos prefixados com remote-repo
. Você pode verificar um ramo remoto tal como um local, mas isto coloca-o num estado (tal como verificar um commit antigo). Você pode pensar neles como ramos apenas de leitura., Para ver os seus ramos remotos, basta passar o comando flag para o comandogit branch
.
pode inspeccionar ramos remotos com os habituais comandos
e git log
. Se aprovar as alterações que um ramo remoto contém, poderá juntá-lo a um ramo local com um id
. Então, ao contrário do SVN, sincronizar o seu repositório local com um repositório remoto é na verdade um processo de dois passos: busca e depois junção. O comando git pull
é um atalho conveniente para este processo.,
git fetch commands and options
git fetch <remote>
Fetch all of the branches from the repository. Isto também transfere todos os commits e arquivos necessários do outro repositório.
git fetch <remote> <branch>
igual ao comando acima, mas só obter o ramo especificado.
git fetch --all
Uma mudança de poder que busca registrados todos os controles remotos e os seus ramos:
git fetch --dry-run
--dry-run
opção irá realizar uma demonstração de executar o comando., Ele irá apresentar exemplos de ações que irá tomar durante a busca, mas não aplicá-las.
git obtém um ramo remoto
o exemplo seguinte irá demonstrar como obter um ramo remoto e actualizar o seu estado de trabalho local para o conteúdo remoto. Neste exemplo, vamos assumir que existe uma origem Central de acordos de recompra a partir da qual o repositório local foi clonado a partir do uso do comando git clone
. Vamos também assumir um repositório remoto adicional chamado coporkers_repo que contém um feature_branch que iremos configurar e obter., Com estas suposições, continuemos o exemplo.
Em primeiro lugar, teremos de configurar o repo remoto usando o comando git remote
.
git remote add coworkers_repo [email protected]:coworker/coworkers_repo.git
Aqui criámos uma referência ao Acordo de cooperação usando o URL do Acordo de recompra. Vamos agora passar esse nome Remoto Para git fetch
para baixar o conteúdo.
git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch
Agora temos localmente o conteúdo de colegas / feature_branch vamos precisar de integrar isto na nossa cópia de trabalho local., Iniciamos este processo usando o comando git checkout
para verificar o novo ramo remoto baixado.
git checkout coworkers/feature_branch
Note: checking out coworkers/feature_branch'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
o resultado desta operação de checkout indica que estamos num estado separado . Isto é esperado e significa que o nosso ref está a apontar para um ref que não está em sequência com a nossa história local. Being that is pointed at the coworkers / feature_branch ref, we can create a new local branch from that ref., O ‘separado HEAD
‘ saída nos mostra como fazer isso usando o git checkout
comando:
git checkout -b local_feature_branch
Aqui temos criado uma nova filial local chamado local_feature_branch. Isto coloca atualizações para apontar o mais recente conteúdo remoto e podemos continuar o desenvolvimento sobre ele a partir deste ponto.
sincronizar a origem com o git fetch
o seguinte exemplo percorre o fluxo de trabalho típico para sincronizar o seu repositório local com o ramo principal do repositório central.,
git fetch origin
Isto irá mostrar os ramos que foram transferidos:
os commits destes novos ramos remotos são mostrados como quadrados em vez de círculos no diagrama abaixo. Como você pode ver, git fetch
dá-lhe acesso a toda a estrutura do ramo de outro repositório.,
Para ver o que confirma ter sido adicionado ao montante principal, você pode executar uma git log
utilizando origin/master como um filtro:
git log --oneline master..origin/master
Para aprovar as alterações e mesclá-las em seu branch master local, use os seguintes comandos:
git checkout master
git log origin/master
em Seguida, podemos usar git merge origin/master
:
git merge origin/master
A origem/mestre e mestre ramos agora apontam para o mesmo cometer, e que são sincronizados com o montante evolução.,
git fetch summary
In review, git fetch
is a primary command used to download contents from a remote repository. git fetch
é usado em conjunto com git remote
git branch
git checkout
e git reset
para atualizar um repositório local para o estado de um controle remoto. O comandogit fetch
é um elemento crítico dos fluxos de trabalho colaborativos do git., git fetch
has similar behavior to git pull
, however, git fetch
can be considered a safer, nondestructive version.