As respostas para Como modificar confirmações existentes e não enviadas? descreva uma maneira de alterar as mensagens de confirmação anteriores que ainda não foram enviadas a montante. As novas mensagens herdam os carimbos de data e hora das confirmações originais. Isso parece lógico, mas existe uma maneira de também redefinir os horários?
git
timestamp
commit
git-rewrite-history
Dhskjlkakdh
fonte
fonte
git commit --amend --reset-author
Respostas:
Use
git filter-branch
com um filtro env que defineGIT_AUTHOR_DATE
eGIT_COMMITTER_DATE
para o hash específico do commit que você deseja corrigir.Isso invalidará esse e todos os futuros hashes.
Exemplo:
Se você quiser alterar as datas da confirmação
119f9ecf58069b265ab22f1f97d2b648faf932e0
, poderá fazê-lo com algo como isto:fonte
Você pode fazer uma nova reformulação interativa e escolher editar para o commit cuja data você deseja alterar. Quando o processo de rebase parar para alterar a confirmação, você digita, por exemplo:
Posteriormente, você continua sua recuperação interativa.
UPDATE (em resposta ao comentário de studgeek): para alterar a data de confirmação em vez da data do autor:
As linhas acima definem uma variável de ambiente GIT_COMMITTER_DATE que é usada na alteração de confirmação.
Tudo é testado no Git Bash.
fonte
rebase
, você pode simplesmente fazer ogit commit --amend
+ var fixedDate = strftime(new Date(), "%c"); + var result = shelljs.exec("git commit --amend --date=\"" + fixedDate + "\" --no-edit");
Uma maneira melhor de lidar com todas essas sugestões em um comando é
Isso definirá a data de confirmação e autor do último commit como "agora".
fonte
LANG= GIT_COMMITTER_DATE="`date`" git commit --amend --date "`date`"
--date "now"
. Git> = 2 interpretará isso.Apenas faça
git commit --amend --reset-author --no-edit
. Para confirmações mais antigas, você pode fazer uma nova reformulação interativa e escolheredit
a confirmação cuja data você deseja modificar.Em seguida, altere o commit com
--reset-author
e--no-edit
para alterar a data do autor para a data atual:Por fim, continue com o seu rebase interativo:
fonte
--reset-author
, é nova no git 1.6.6 (ref gitlog.wordpress.com/2010/01/13/git-1-6-6 )--reset-author
redefinirá o autor e a data do autor para agora.Eu escrevi um script e um pacote Homebrew para isso. Super fácil de instalar, você pode encontrá-lo na
PotatoLabs/git-redate
página do GitHub .Sintaxe:
Você só precisa executar
git redate
e poderá editar todas as datas no vim dos 5 commits mais recentes (também há uma-c
opção para quantos commits você deseja voltar, o padrão é 5). Deixe-me saber se você tiver quaisquer perguntas, comentários ou sugestões!fonte
Cada confirmação está associada a duas datas, a data do confirmador e a data do autor. Você pode ver essas datas com:
Se você deseja alterar a data do autor e a data do consolidador dos últimos 6 confirmados, você pode simplesmente usar um rebase interativo:
.
Para todas as confirmações nas quais você deseja alterar a data, substitua
pick
poredit
(ou apenase
) e salve e saia do seu editor.Agora você pode alterar cada confirmação especificando a data do autor e a data do commit no formato ISO-8601:
A primeira data é a data de confirmação, o segundo é a data do autor.
Em seguida, vá para o próximo commit com:
Repita o processo até alterar todos os seus commits. Verifique sua progressão com
git status
.fonte
git checkout name-of-current-branch
.--no-edit
emgit commit --amend --no-edit --date=2017-10-08T09:51:07
manter a antiga mensagem de confirmação.GIT_COMMITTER_DATE
, conforme descrito aqui eddmann.com/posts/...fonte
Com base theosp 's resposta , escrevi um script chamado
git-cdc
(data de alteração para cometer) que eu coloquei no meuPATH
.O nome é importante:
git-xxx
em qualquer lugar do seuPATH
computador, você pode digitar:Esse script está no bash, mesmo no Windows (já que o Git o chamará do ambiente msys )
Com isso, você pode digitar:
Isso redefiniria a data de autor / confirmação do commit antes de HEAD (
@~
) para a data especificada.Isso redefiniria a data de autor / confirmação do commit antes de HEAD (
@~
) para a mesma hora, mas 2 dias atrás.Ilya Semenov menciona nos comentários :
fonte
git cdc @~ "2014-07-04 20:32:45
caso contrário, não reconheceria a hora e, portanto, obteria a hora 00:00:00 (torna-se o terceiro argumento).brew install coreutils
), adicioná-lo ao PATH (PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
) e usar a sintaxe "2 dias atrás".2 days ago
" funciona?Como editar várias datas de confirmação
Outras respostas não são muito convenientes para editar várias datas de confirmação. Voltei a esta questão depois de alguns anos para compartilhar uma técnica.
Para alterar as datas dos 4 últimos commits:
Edite a rebase da seguinte maneira, inserindo
exec
linhas para modificar as datas conforme necessário:fonte
--amend
/--date
. Mais simples do que minha própria resposta usando variáveis de ambiente. Votado.GIT_AUTHOR_DATE
apenas.exec git commit --amend --no-edit --date "now"
se for o último commit anterior.
se você já pressiona a orgin e pode forçar o uso:
se você não pode forçar o push e se for pressionado, não pode alterar o commit! .
fonte
Aqui está um alias conveniente que altera os tempos de confirmação e autor da última confirmação para um horário aceito por
date --date
:Uso:
git cd <date_arg>
Exemplos:
Edit: Aqui está uma versão mais automatizada que verifica se o índice está limpo (sem alterações não confirmadas) e reutiliza a última mensagem de confirmação ou falha de outra forma (à prova de falhas):
fonte
Eu criei este pacote npm para alterar a data de confirmações antigas.
https://github.com/bitriddler/git-change-date
Uso da amostra:
Você será solicitado a escolher o commit que deseja modificar e inserir a nova data.
Se você deseja alterar um commit por hash específico, execute este
git-change-date --hash=[hash]
fonte
A seguinte função bash mudará o horário de qualquer confirmação na ramificação atual.
Tenha cuidado para não usar se você já enviou o commit ou se o usa em outro ramo.
fonte
if [[ -z "$commit" ]]
->if [[ -z "$date_timestamp" ]]
GIT_COMMITTER_DATE=
no final do método para impedir que mais confirmações manuais mantenham a data especificada.Para alterar a data do autor e a data de confirmação:
fonte
Se você deseja obter a data exata de outra confirmação (digamos que você reformulou a edição de uma confirmação e deseja que ela tenha a data da versão original de pré-recuperação):
Isso corrige a data do commit HEAD para ser exatamente a data do commit a383243 (inclua mais dígitos se houver ambiguidades). Também será exibida uma janela do editor para que você possa editar a mensagem de confirmação.
Essa é a data do autor, que é o que você costuma cuidar - veja outras respostas para a data do committer.
fonte
Se você deseja executar a resposta aceita ( https://stackoverflow.com/a/454750/72809 ) na linha de comando padrão do Windows, você precisa do seguinte comando:
Notas:
^
), mas não obtive êxito.Muito obrigado a um post de Colin Svingen . Mesmo que o código dele não funcionasse para mim, ele me ajudou a encontrar a solução correta.
fonte
Se o commit ainda não foi enviado, posso usar algo assim:
depois disso, o git bash abre o editor com a data já aplicada, então você precisa salvá-lo digitando no modo de comando do editor VI ": wq" e pode pressioná-lo
fonte
--no-edit
opçãogit push -f
(atualização forçada). Isso pode ter efeitos colaterais, no entanto. (especialmente se muitas pessoas tiverem clones locais do repositório)Para quem usa o Powershell
Crédito para https://mnaoumov.wordpress.com/2012/09/23/git-change-date-of-commit/
fonte
Já existem muitas ótimas respostas, mas quando quero alterar a data para várias confirmações em um dia ou em um mês, não encontro uma resposta adequada. Então, eu crio um novo script para isso com explicações, espero que ajude alguém:
A data será alterada:
fonte