CONTESTANDO QUESTÕES DA PROVA: git switch e git reset

Oi galera, td bem?
Mandei mensagem pra o Bruce hj contestando a 6a e a 12a questão e queria a opinião de vocês sobre :grimacing:
Meu argumento é que tanto git checkout quanto git switch servem pra alterar entre ramificações certo? Git switch é um comando mais novo que foi criado junto com o git restore pra meio q “dividir responsabilidades” ao invés de usar só git checkout pra td… então não entendo pq só git checkout seria a resposta certa.
E quanto à questão 12, tanto git reset e git revert desfazem um commit só que de maneiras diferentes… como isso não foi especificado na questão tb não entendo pq só git revert seria a resposta correta :thinking:

Qual a opinião de vocês?

20 Likes

eu também achei a questão do git revert e git reset dubia. pois um um volta o historico e o outro apenas uma parte. mas naõ ficou claro qual opção queriam.

10 Likes

Boa tarde, esse assunto já foi discutido aqui algumas vezes, mas resumindo, a alternativa git reset, tinha escrito “git reset < commit >” porém o comando ‘git reset’ não passa commit como parametro pois ele reseta automaticamente para o último commit, assim anulando a alternativa e restando somente uma correta que é a git revert < commit >.

11 Likes

O git switch surgiu exatamente “mais recentemente” como uma alternativa mais direta ao git checkout. Ou seja, ambas as alternativas estão corretas.

Sobre o git reset, a questão poderia explorar um contexto: explicar que o objetivo seria reverter um commit realizado , por exemplo, há 10 linhas atrás. Assim, a opção de optar por um git reset ou git reset hard se tornaria menos viável e o git revert se tornaria a opção mais interessante. Mas, na falta de uma ambientação, tanto o git reset quanto o git revert podem ser utilizados para desfazer um commit, tornando as duas alternativas corretas.

5 Likes

Olha, git reset aceita commit como parâmetro sim… eu mesma já usei git reset e o hash do commit pra resetar pra um determinado ponto do log…
Inclusive, dá pra mostrar isso acontecendo pelo visualizing git.

3 Likes


Segue vídeo demonstrando o git reset <commit> em funcionamento.

7 Likes

utiliza o revert nesse site q a gente vê a diferença, aparentemente esse comando q vc deu não desfez os commits só apontou pra um commit antigo o Head

3 Likes

realmente a questão do commit reset foi de ficar entre duas respostas corretas, se for levar ao resultado dos comandos

4 Likes

Pelo que entendi, git revert somente reverte o commit e não o conteúdo, enquanto o git reset volta e apaga o conteúdo posterior.

1 Like

Eu errei essas duas questões e achei estranho também, depois que vc receber um parecer dá um retorno para nós colega. Porque aí entramos com uma contestação também. Fora que isso é importante para melhorarmos cada vez mais o curso! :+1: :facepunch:

3 Likes

https://git-scm.com/docs/git-reset
git-reset - Reset current HEAD to the specified state

Aqui a documentação demonstra o que faz o RESET, ele aponta o índice para o commit especificado. Com o parâmetro --soft (padrão), só mexe nos metadados, sem alterar o conteúdo, enquanto que com o parâmetro --hard mexe no conteúdo, apagando ou alterando arquivos se preciso.
Esse comando volta ao ponto desejado, de forma destrutiva, realmente DESFAZENDO os commits, descartando o histórico e opcionalmente alterando o conteúdo até o ponto que estava conforme indicado.
A documentação sugere casos de uso em alguns exemplos, como quando a mensagem do commit ficou errada, ou quando não se deseja manter em histórico o último ou últimos commits, por exemplo.

(vide exemplos na página oficial)

https://git-scm.com/docs/git-revert
git-revert - Revert some existing commits

Nesse caso a documentação mostra que esse comando reverte as mudanças, porém criando um novo commit, que espelha o estado anterior desejado, dessa forma mantendo todo o histórico. Ou seja, não-destrutivo.

(vide exemplos na página oficial)


Nos exemplos da documentação, é usado HEAD como alvo, porém os dois comandos também aceitam o hash do commit, com as devidas diferenças de uso.

Sendo assim, tanto RESET quanto REVERT fazem a desejada viagem no tempo, ou o “desfazer” commit que se pretende, mas têm resultados diferentes, e casos de uso diferentes.

Verificando…

RESET:

REVERT:

O RESET (destrutivo, apaga a história) é útil quando você está trabalhando em repositório local, ou sozinho, e quer apagar commits anteriores, sem deixar rastro. O que não é indicado para quando se está trabalhando de forma colaborativa, em repositórios públicos, em commits já enviados ao repositório remoto, onde é obviamente mais indicado o REVERT (não destrutivo, mantém a história).

A expressão genérica “desfazer commit” pode ser atendida com ambos comandos, a depender do contexto.

8 Likes

Já sobre comando pra trocar de ramificação, vejamos…

https://git-scm.com/docs/git-checkout
git-checkout - Switch branches or restore working tree files

https://git-scm.com/docs/git-switch
git-switch - Switch branches

Esse dá pra resumir mais rápido: ambos podem ser utilizados para trocar de branch, conforme a própria descrição. :sunglasses:

É que o git switch é mais recente, foi lançado na versão 2.23 (2019) do Git, pra simplificar a troca de branches que era sempre feita com o git checkout (este é utilizado pra mais de uma finalidade).

6 Likes

Exatamente.

2 Likes

então ta explicado, ele não desfaz o commit, ele só seta para outro local e deleta o resto, desculpe pela informação errada no outro momento, eu havia pesquisado sobre isso, mas claramente entendi errado.

1 Like

Acredito que embora git reset e git revert desfazem, está sendo considerado na questão a resposta conforme a documentação.

1 Like

Eu concordo com você quanto a questão 12.
(Quanto a outra eu não tinha conhecimento, até agora, sobre o git switch)
Eu também mandei mensagem para o Bruce a respeito dessa questão, porque faltou contexto no enunciado para que pudéssemos responder de forma assertiva.
Como ficou ficou em aberto, acabou tendo duas respostas “corretas”.

(Eu nem quis refazer e responder outra coisa, pq de qualquer forma as duas seriam verdadeiras) O correto a se fazer, na minha opinião, é anular a questão; ou, pelo menos admitir duas respostas corretas.

3 Likes

Eu também nunca tinha visto git switch…

Em relação à prova, os enunciados estavam bem ruinzinhos e as questões de pseudo código estavam tristemente mal formatadas também…

2 Likes

Eu também fiquei em dúvida na git reset e na revert. Achei que as duas tinham funções iguais mas com algumas peculiaridades… no final das contas, eu acabei optando pelas opções mostradas em aula.

Alguém pode me tirar uma dúvida sobre a questão que fala sobre o comando que não irá funcionar, e pq não seria a opção “git add”? Na minha cabeça, eu acho que precisaria de um comando adicional “git add <…>” para funcionar.

Além da ambiguidade em algumas questões, vale ressaltar também que a formatação das questões com código estavam horríveis.

4 Likes

Sua explicação ficou mt completa :sweat_smile: obrigada pela contribuição! Me ajudou a ter mais certeza do que eu tava achando.
Eu espero mt que eles reconsiderem essas duas questões.

3 Likes