Estou trabalhando com um repositório git que precisa de uma confirmação de outro repositório git que não sabe nada sobre o primeiro.
Normalmente, eu selecionaria cereja usando o HEAD@{x}
no reflog, mas como isso .git
não conhece nada dessa entrada de reflog (diretório físico diferente), como posso escolher isso de maneira cerejeira, ou posso?
Estou usando git-svn
. Meu primeiro ramo está usando git-svn
o trunk
repositório Subversion e o próximo ramo está usando git-svn
um ramo Subversion.
git
cherry-pick
gitcoder182
fonte
fonte
Respostas:
Você precisará adicionar o outro repositório como um controle remoto e buscar suas alterações. A partir daí, você vê o commit e pode selecioná-lo.
Curtiu isso:
Agora você tem todas as informações para simplesmente fazer
git cherry-pick
.Mais informações sobre como trabalhar com controles remotos aqui: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
fonte
--stdlayout
opção git-svn se estiver usando o layout padrão de trunk / branches / tags no Subversion. Então o ramo Subversion será um mero ramo remoto do git.git am < d821j8djd2dj812.patch
. Fora do GH, conceitos semelhantes poderiam ser feitos conforme referenciado na resposta alternativa abaixo.A resposta, como dada, é usar o patch de formato, mas como a pergunta era como escolher uma cereja em outra pasta, aqui está um pedaço de código para fazer exatamente isso:
fonte
git format-patch
comando cria um patch a partirsome_other_repo
da confirmação especificada pelo seu SHA (-1
para uma única confirmação). Esse patch é canalizadogit am
, o que aplica o patch localmente (-3
significa tentar a combinação de três vias se o patch falhar na aplicação correta). Espero que isso explique.--ignore-whitespace
. Comando completo:git --git-dir=../<some_other_repo>/.git format-patch -k -1 --stdout <commit SHA> | git am -3 -k --ignore-whitespace
Aqui está um exemplo da fusão remota de busca.
Então você pode:
ou você pode até mesclar todo o ramo
fonte
git merge projectB/master
é muito, muito errado , porque você não está aplicando as alterações de uma única confirmação (como uma cereja-pick faria), você está realmente fundir em todas as alterações emprojectB/master
que não estão contidas em seu própriomaster
ramo.git remote rm projectB
. Use tambémgit tag -d tag-name
para remover as tags buscadas no repositório remoto. As confirmações remotas não serão mais exibidas no seu histórico e a remoção as removerá do armazenamento eventualmente.Você pode fazer isso, mas requer duas etapas. Aqui está como:
Substitua
<remote-git-url>
pelo URL ou caminho para o repositório que você deseja escolher.Substitua
<branch>
pelo nome da ramificação ou tag que você deseja selecionar no repositório remoto.Você pode substituir
FETCH_HEAD
por um git SHA da ramificação.Atualizado: modificado com base no feedback de @ pkalinow.
fonte
git fetch <repo-url> <branch> && git cherry-pick <sha>
.Aqui estão as etapas para adicionar um controle remoto, buscar ramificações e escolher uma confirmação
Fonte: https://coderwall.com/p/sgpksw
fonte
Veja Como criar e aplicar um patch com Git . (Pela redação da sua pergunta, presumi que este outro repositório é para uma base de código totalmente diferente. Se for um repositório para a mesma base de código, você deve adicioná-lo como um controle remoto, conforme sugerido por @CharlesB. Mesmo que seja para outro base de código, acho que você ainda pode adicioná-lo como um controle remoto, mas talvez não queira colocar todo o ramo em seu repositório ...)
fonte
Você pode fazer isso em uma linha da seguinte maneira. Espero que você esteja no repositório git que precisa da alteração escolhida pela cereja e tenha feito check-out para corrigir o branch.
git fetch [URL da ramificação] [Ramifique para escolher a partir de] && git cherry-pick [ID de confirmação]
fonte
ssh://
parte, apenas parahttps://
Sim. Busque o repositório e escolha a partir da ramificação remota.
fonte
Supondo que
A
é o repositório do qual você deseja escolher a cereja eB
o que você deseja escolher, você pode fazer isso adicionando</path/to/repo/A/>/.git/objects
a</path/to/repo/B>/.git/objects/info/alternates
. Crie essesalternates
arquivos se eles não existirem.Isso fará com que o repositório B acesse todos os objetos git do repositório A e fará com que a escolha de cereja funcione para você.
fonte
Minha situação era que eu tinha um repositório vazio para o qual a equipe empurra e um clone daquele sentado ao lado dele. Esse conjunto de linhas em um Makefile funciona corretamente para mim:
Mantendo o mestre do repo bare atualizado, podemos escolher uma alteração proposta publicada no repo bare. Também temos uma maneira (mais complicada) de escolher vários braches para revisão e teste consolidados.
Se "não sabe nada" significa "não pode ser usado como um controle remoto", isso não ajuda, mas essa pergunta do SO surgiu quando eu estava pesquisando no Google para criar esse fluxo de trabalho, então pensei em contribuir de volta.
fonte
Se você desejar selecionar várias confirmações para um determinado arquivo até chegar a uma confirmação, use o seguinte.
fonte