Como faço para remover o palco interativamente de um pedaço específico no git?


106

No git, se eu tiver alguns blocos do mesmo arquivo testados em meu índice, como posso remover o estágio de um deles de forma interativa?

Existe alguma alternativa para remover o teste de todo o arquivo e, em seguida, reorganizar os pedaços que desejo manter ou desfazer manualmente as alterações na cópia de trabalho e, em seguida, adicionar interativamente essas alterações desfeitas?

Respostas:


136

Experimente git reset --patch filename; isso deve fazer o oposto de git add --patch, de acordo com a documentação . A forma abreviada -ptambém funciona para ambos os comandos.


Não acho que minha versão tenha (1.6.3.3), mas parece ser a resposta correta.
Andrew Grimm,

2
Nesse caso (e assumindo que você não pode atualizar por algum motivo), sugiro que você use git stash save --keep-indexpara salvar e redefinir as alterações atuais da cópia de trabalho. Em seguida, você pode redefinir seu arquivo e desfazer as alterações indesejadas. Se você copiar o arquivo para algum local temporário primeiro, poderá usar diffpara salvar as alterações que desfez. Em seguida, você pode adicionar o arquivo novamente (não há necessidade de uma adição interativa, pois você escondeu as outras alterações nas quais não estava interessado). Use git stash poppara recuperar as alterações antigas e diffpara aplicar as alterações que você desfez. Bastante pesado ... :-(
Aasmund Eldhuset

The short form -p also works for both commands... Você quer dizer git reset -p filename?
Nawaz,

1
@Nawaz: Correto - git add -p filenameseleciona seletivamente as alterações desse arquivo e, git reset -p filenameseletivamente, remove as alterações. Também existe o git checkout -p -- filename, que permite descartar seletivamente as alterações de um arquivo. Aviso: cada um de adde resetpode ser usado para desfazer o outro dos dois, mas se você usar essa forma de checkoutpara descartar uma alteração, não poderá recuperá-la.
Aasmund Eldhuset

2

git guitem uma interface de usuário decente para encenar ou desmontar pedaços ou linhas interativamente. Existem clientes GUI mais bonitos / melhores, mas git guié leve, integrado e de plataforma cruzada (lin, win, mac).

https://git-scm.com/docs/git-gui

Basta clicar com o botão direito em um pedaço para colocar / tirar o palco. Para linhas, destaque as linhas primeiro e, a seguir, clique com o botão direito.


-1

GitX tem uma bela IU para desempatar pedaços de um arquivo: insira a descrição da imagem aqui

O cliente oficial não é mantido há algum tempo, mas um fork do GitHub com mais recursos é popular em alguns círculos. ( postagem no blog sobre isso )


1
Para os usuários do Windows que estão por aí, as extensões Git têm uma interface de usuário igualmente agradável.
Aasmund Eldhuset

4
O mesmo acontece com o integrado git gui, exceto que não tenho certeza se usaria a palavra "legal";)
MatrixFrog

1
SourceTree (Windows + Mac) também tem uma bela interface do usuário para isso.
chrnola

Devo mencionar os clientes gráficos Git mais recentes agora - o GitKraken é lindo e suporta isso (embora agora venha com uma taxa pesada para uso comercial). O GitHub Desktop do GitHub é gratuito, bonito e oferece suporte a blocos de preparação e eliminação facilmente. GitKraken e GitHub Desktop são plataformas cruzadas, mas nenhum é de código aberto.
jdgregson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.