git - Seu branch está à frente de 'origin / master' por 1 commit

107

Eu sou novato no git e estou trabalhando no git.

Eu adicionei alguns arquivos no git:

git add <file1>
git add <file2>

então eu queria empurrar isso para revisão, mas por engano eu fiz

git commit

para que os arquivos que alterei não passem por revisões.
Agora, se eu inserir o comando:

git status

diz

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

Eu quero reverter esse commit e quero enviar esses arquivos para revisão ao invés de commit. Alguém pode me dizer como posso fazer isso?

sam
fonte
Se você quiser desfazer seu commit - dê uma olhada na pergunta semelhante .
ДМИТРИЙ МАЛИКОВ
1
Não sei o que você está usando para revisões de código. A resposta simples para a simples questão de como cancelar o commit égit reset HEAD^
Anonymoose
eu reiniciei o HEAD. mas então quando eu tento empurrar, então ele me diz D file1.py quando eu tentei psuh então novamente ele me diz que seu branch está à frente de origin / master por 1 commit
sam
O que você quer dizer quando diz "Quero enviar esses arquivos para revisão"? Você quer que outras pessoas vejam o seu commit?
Jake Greene
meu código será primeiro revisado e depois confirmado. então, primeiro, quero enviar o código para revisão, mas cometi por engano
sam

Respostas:

128

Você não pode enviar nada que ainda não tenha sido confirmado. A ordem das operações é:

  1. Faça sua mudança.
  2. git add - este estágio suas mudanças para comprometer
  3. git commit - isso confirma suas mudanças encenadas localmente
  4. git push - isso empurra suas alterações confirmadas para um controle remoto

Se você empurrar sem se comprometer, nada será enviado. Se você fizer commit sem adicionar, nada será confirmado. Se você adicionar sem comprometer, nada acontece, git meramente lembra que as mudanças que você adicionou devem ser consideradas para o próximo commit.

A mensagem que você está vendo (seu branch está à frente em 1 commit) significa que seu repositório local tem um commit que ainda não foi enviado.

Em outras palavras: adde commitsão operações locais push, pulle fetchsão operações que interagem com um controle remoto.

Uma vez que parece haver um fluxo de trabalho de controle de origem oficial no local onde você trabalha, você deve perguntar internamente como isso deve ser tratado.

tdammers
fonte
4
aha ok. então significa que, após o commit, eu tenho que empurrar
sam
4
Boa explicação - o questionador provavelmente não quer realmente reverter o commit, mas sim, fazer com que as pessoas revisem o commit antes de enviá-lo para o originrepositório. Eu também recomendo a leitura de alguns tutoriais / introduções para git em git-scm.com/documentation
dbr
1
Quando meu status git diz "Seu branch está à frente de 'origin / development' por 1 commit." como exatamente vejo que os arquivos foram alterados? git diff não parece fazer nada
Tom,
Às vezes é outra pessoa que trabalhou lá. Dê uma puxada antes de empurrar
Adrian P.
67

git reset HEAD^ --soft (Salve suas alterações, de volta ao último commit)

git reset HEAD^ --hard (Descartar as alterações, voltar ao último commit)

Juanito Fatas
fonte
3
Qual é o significado da CABEÇA com uma cenoura '^'? Eu vi isso sendo escrito sem a cenoura também.
Mugen
29

Se você deseja apenas descartar as alterações e reverter para o último commit (aquele que você queria compartilhar):

git reset --hard HEAD~

Você pode querer verificar para ter certeza absoluta de que deseja isso ( git log), porque você perderá todas as alterações.

Uma alternativa mais segura é correr

git reset --soft HEAD~ # reset to the last commit
git stash              # stash all the changes in the working tree 
git push               # push changes 
git stash pop          # get your changes back 
Shep
fonte
21

Resolvi isso executando um simples:

git pull

Nada mais. Agora está mostrando:

# On branch master
nothing to commit, working directory clean
Karlingen
fonte
Isso pode causar problemas se houver mais de uma ramificação criada que não seja necessária.
Anil Kumar Arya
1
você voltou para seu estado remoto e perdeu seu último trabalho: D
Gucho Ca
13

git reset HEAD ^

então os arquivos modificados devem aparecer.

Você pode mover os arquivos modificados para um novo ramo

usar,

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

então você deve estar em um branch limpo e suas alterações devem ser armazenadas em newbranch. Mais tarde, você poderia simplesmente mesclar esta mudança no branch master

OZI
fonte
4
git reset HEAD <file1> <file2> ...

remove os arquivos especificados do próximo commit

Bnjmn
fonte