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?

Andrew Grimm
fonte

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.

Aasmund Eldhuset
fonte
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.

wisbucky
fonte
-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 )

John Douthat
fonte
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