Como posso encontrar a localização de origem/mestre no git e como faço para alterá -lo?

StackOverflow https://stackoverflow.com/questions/277077

  •  07-07-2019
  •  | 
  •  

Pergunta

Eu sou um novato git. Recentemente, mudei um projeto Rails de Subversão para Git. Eu segui o tutorial aqui: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

Eu também estou usando o desacomatório para armazenar meu código. Faço alterações no meu laptop Mac no trem de/para o trabalho e depois os pressiono para se desenrolar quando tenho uma conexão de rede usando o seguinte comando:

git push unfuddle master

Uso o Capistrano para implantações e retiro o código do repositório desbotado usando a filial mestre.

Ultimamente, notei a seguinte mensagem quando executo "status git" no meu laptop:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

E estou confuso sobre o porquê. Eu pensei que meu laptop era a origem ... mas não sei se o fato de que eu originalmente puxei de subversão ou empurrar para se desenrolar é o que está fazendo com que a mensagem apareça. Como posso:

  1. Descubra onde está o Git pensa 'Origin/Master'?
  2. Se estiver em outro lugar, como transformar meu laptop na 'origem/mestre'?
  3. Obtenha esta mensagem para ir embora. Isso me faz pensar que Git está infeliz com alguma coisa.

Meu Mac está executando o Git versão 1.6.0.1.


Quando eu corro git remote show origin Conforme sugerido pelo DBR, recebo o seguinte:

~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

Quando eu corro git remote -v Conforme sugerido por Aristóteles Pagaltzis, recebo o seguinte:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

Agora, curiosamente, estou trabalhando no meu projeto no geekfor diretório, mas diz que minha origem é minha máquina local no gf diretório. Eu acredito gf Foi o diretório temporário que usei ao converter meu projeto de subversão em git e provavelmente de onde eu pressionei para se desenrolar. Então eu acredito que verifiquei uma nova cópia de se desenrolar para o geekfor diretório.

Parece que eu deveria seguir o conselho da DBR e fazer:

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
Foi útil?

Solução

1. Descubra onde Git acha que 'Origin/Master' está usando git-remote

git remote show origin

..que vai devolver algo como ..

* remote origin
  URL: me@remote.example.com:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

Um controle remoto é basicamente um link para um repositório remoto. Quando você faz..

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

..git empurrará alterações nesse endereço adicionado. É como um marcador, para repositórios remotos.

Quando você corre git status, ele verifica se o controle remoto está faltando compromissos (em comparação com o repositório local) e, em caso afirmativo, por quantas começos. Se você pressionar todas as suas alterações na "origem", ambos estarão sincronizados, para que você não receba essa mensagem.

2. Se estiver em outro lugar, como transformar meu laptop na 'origem/mestre'?

Não faz sentido fazer isso. Diga "Origin" é renomeado para "laptop" - você nunca quer fazer git push laptop do seu laptop.

Se você deseja remover o controle remoto da origem, você faz ..

git remote rm origin

Isso não excluirá nada (em termos de conteúdo de arquivo/histórico de revisões). Isso vai parar a mensagem "Seu ramo está à frente por ...", pois não comparará mais seu repositório com o controle remoto (porque se foi!)

Uma coisa a lembrar é que não há nada de especial em origin, é apenas um nome padrão que Git usa.

Git usa origin por padrão quando você faz coisas como git push ou git pull. Então, se você tem um controle remoto que usa muito (se desenrolar, no seu caso), eu recomendaria adicionar como "origem":

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

ou faça o acima em um comando usando set-url:

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

Então você pode simplesmente fazer git push ou git pull para atualizar, em vez de git push unfuddle master

Outras dicas

Cheguei a essa pergunta procurando uma explicação sobre o que a mensagem "Seu ramo está à frente por ..." significa, no esquema geral do Git. Não houve resposta para isso aqui, mas como essa pergunta aparece atualmente no topo do Google quando você procura a frase "Sua filial está à frente de 'Origin/Master'", e desde então descobri o que a mensagem realmente significa , Pensei em postar as informações aqui.

Então, sendo um novato git, posso ver que a resposta que eu precisava era uma resposta distintamente iniciante. Especificamente, o que a frase "sua ramificação está à frente ..." significa que há arquivos que você adicionou e comprometido com o repositório local, mas nunca empurrou para a origem. A intenção desta mensagem é mais ofuscada pelo fato de que "Git Diff", pelo menos para mim, não mostrou diferenças. Não foi até que eu corri "Git Diff Origin/Master" que me disseram que havia diferenças entre meu repositório local e o mestre remoto.

Então, para ficar claro:


"Seu ramo está à frente por ..." => Você precisa empurrar para o mestre remoto. Corre "Git Diff Origin/Master" Para ver quais são as diferenças entre o repositório local e o repositório principal remoto.


Espero que isso ajude outros novatos.

(Além disso, reconheço que existem sutilezas de configuração que podem invalidar parcialmente essa solução, como o fato de que o mestre pode não ser "remoto", e que "origem" é um nome reconfigurável usado pela convenção, etc. Mas os novatos fazem Não me importo com esse tipo de coisa. Queremos respostas simples e diretas. Podemos ler sobre as sutilezas mais tarde, depois de resolver o problema premente.)

Conde

Eu tive um problema que era semelhante a isso onde meu diretório de trabalho era ahead of origin by X commits mas o git pull estava resultando em Everything up-to-date. Eu consegui consertar isso seguindo este conselho. Estou postando isso aqui, caso isso ajude outra pessoa com um problema semelhante.

A correção básica é a seguinte:

$ git push {remote} {localbranch}:{remotebranch}

Onde as palavras entre colchetes devem ser substituídas pelo seu nome remoto, seu nome de filial local e seu nome de ramificação remota. por exemplo

$ git push origin master:master

Às vezes, há uma diferença entre a versão em cache local do Origin Master (Origin/Master) e o verdadeiro mestre de origem.

Se você correr git remote update isso vai ressinchar o mestre de origem com origem/mestre

Veja a resposta aceita para esta pergunta

Diferenças entre Git Pull Origin Master e Git Pull Origin/Master

Eu pensei que meu laptop era a origem ...

Isso é meio sem sentido: origin refere -se ao repositório remoto padrão - aquele que você costuma buscar/retirar as mudanças de outras pessoas.

Como posso:

  1. git remote -v vai te mostrar o que origin é; origin/master é o seu "marcador" para o último estado conhecido do master ramo do origin repositório e seu próprio master é um ramo de rastreamento por origin/master. Tudo isso é como deveria ser.

  2. Você não. Pelo menos não faz sentido que um repositório seja o repositório remoto padrão para si.

  3. Não é. Está apenas dizendo que você fez muitos commits localmente, que não estão no repositório remoto (de acordo com o último estado conhecido desse repositório).

Solução

$ git push origin

^ Isso resolveu isso para mim. O que fez, sincronizou meu mestre (no laptop) com "origem" que está no servidor remoto.

Estou lutando com esse problema e nenhuma das respostas anteriores aborda a pergunta como a vejo. Eu retirei o problema de volta ao seu básico para ver se posso deixar meu problema claro.

Crio um novo repositório (REP1), coloco um arquivo nele e o comprometo.

mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"

Eu crio um clone de Rep1 e o chamo de Rep2. Eu olho para dentro do Rep2 e vejo o arquivo correto.

cd ~
git clone ~/rep1 rep2
cat ~/rep2/README

No Rep1, faço uma única alteração no arquivo e o comprometo. Então, no Rep1, crio um controle remoto para apontar para o Rep2 e pressionar as alterações.

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

Agora, quando eu entro no Rep2 e faço um 'status de git', me disseram que estou à frente da origem.

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#

O ReadMe no Rep2 é como era originalmente, antes da segunda confirmação. As únicas modificações que fiz são o Rep1 e tudo o que eu queria era empurrá -las para o Rep2. O que não estou entendendo?

Está esperando você "empurrar". Tentar:

$ git push

Recentemente, tive esse problema e achei que era porque havia excluído alguns arquivos que não precisava mais. O problema é que o Git não sabe que os arquivos foram excluídos e vê que o servidor ainda o possui. (servidor = origem)

Então eu corri

git rm $(git ls-files --deleted)

E depois executou uma confirmação e empurre.

Isso resolveu o problema.

Eu também sou um novato git. Eu tive o mesmo problema com 'Sua filial está à frente de Origin/Master by N Commits' Mensagens. Fazer a sugerida 'Git Diff Origin/Master' mostrou algumas diferenças que eu não me importei em manter. Então ...

Como meu clone Git era para hospedar, e eu queria uma cópia exata do mestre repositório e não me importei em manter nenhuma alteração local, decidi salvar todo o meu repositório e criar um novo:

(na máquina de hospedagem)

mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo

Para conveniência, eu costumava fazer alterações no clone na minha máquina de hospedagem. Não mais. Farei essas alterações no mestre, com um comprometimento lá e farei uma atração git. Felizmente, isso deve manter meu clone git na máquina de hospedagem em sincronização completa.

/Nara

Eu estava me perguntando a mesma coisa sobre meu repositório. No meu caso, eu tinha um controle remoto antigo para o qual não estava mais pressionando, então precisava removê -lo.

Obtenha uma lista de controles remotos:

git remote

Remova o que você não precisa

git remote rm {insert remote to remove}

É possível redefinir para um compromisso específico antes que seus próprios compromissos ocorram.

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)

Usar git log Para descobrir o que o comprometimento era o compromisso que você teve antes das mudanças locais.

$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

Tome nota dos compromissos locais e redefinir diretamente para o compromisso anterior:

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

Eu tive o problema "Seu ramo está à frente de 'Origin/Master' por NN Commits". Quando eu empurrei para um repositório remoto com:

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

Quando descobri que meu endereço remoto estava no arquivo .git/fetch_head e usado:

git push

O problema desapareceu.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top