Odpowiedzi na pytanie, jak zmodyfikować istniejące, niepoprawne zatwierdzenia? opisz sposób zmiany poprzednich komunikatów zatwierdzenia, które nie zostały jeszcze przekazane w górę. Nowe wiadomości dziedziczą znaczniki czasu oryginalnych zatwierdzeń. Wydaje się to logiczne, ale czy istnieje sposób na ponowne ustawienie czasów?
git
timestamp
commit
git-rewrite-history
Dhskjlkakdh
źródło
źródło
git commit --amend --reset-author
Odpowiedzi:
Używaj
git filter-branch
z ustawionym filtrem envGIT_AUTHOR_DATE
iGIT_COMMITTER_DATE
dla określonego skrótu zatwierdzenia, który chcesz naprawić.Spowoduje to unieważnienie tego i wszystkich przyszłych skrótów.
Przykład:
Jeśli chcesz zmienić daty zatwierdzenia
119f9ecf58069b265ab22f1f97d2b648faf932e0
, możesz to zrobić za pomocą czegoś takiego:źródło
Możesz zrobić interaktywny rebase i wybrać edycję zatwierdzenia, którego datę chcesz zmienić. Gdy proces rebase zostanie zatrzymany w celu zmiany zatwierdzenia, które wpiszesz, na przykład:
Następnie kontynuujesz interaktywny rebase.
AKTUALIZACJA (w odpowiedzi na komentarz studgeek): aby zmienić datę zatwierdzenia zamiast daty autora:
Powyższe wiersze ustawiają zmienną środowiskową GIT_COMMITTER_DATE, która jest używana do zmiany zatwierdzenia.
Wszystko jest testowane w Git Bash.
źródło
rebase
, można po prostu zrobićgit commit --amend
+ var fixedDate = strftime(new Date(), "%c"); + var result = shelljs.exec("git commit --amend --date=\"" + fixedDate + "\" --no-edit");
Lepszym sposobem obsługi wszystkich tych sugestii za pomocą jednego polecenia jest
Spowoduje to ustawienie daty ostatniego zatwierdzenia i autora na „teraz”.
źródło
LANG= GIT_COMMITTER_DATE="`date`" git commit --amend --date "`date`"
--date "now"
. Git> = 2 to zinterpretuje.Po prostu zrób
git commit --amend --reset-author --no-edit
. W przypadku starszych zatwierdzeń możesz wykonać interaktywnąedit
zmianę bazy i wybrać zatwierdzenie, którego datę chcesz zmodyfikować.Następnie zmień zatwierdzenie za pomocą
--reset-author
i,--no-edit
aby zmienić datę autora na bieżącą:Wreszcie kontynuuj z interaktywnym rebase:
źródło
--reset-author
, jest nowy w git 1.6.6 (ref gitlog.wordpress.com/2010/01/13/git-1-6-6 )--reset-author
zresetuje teraz zarówno autora, jak i datę autora.Napisałem do tego skrypt i pakiet Homebrew. Bardzo łatwy w instalacji, można go znaleźć na
PotatoLabs/git-redate
stronie GitHub .Składnia:
Musisz tylko uruchomić
git redate
i będziesz mógł edytować wszystkie daty w vim z ostatnich 5 zatwierdzeń (istnieje również-c
opcja określająca, ile zatwierdzeń chcesz cofnąć, domyślnie jest to 5). Daj mi znać, jeśli masz jakieś pytania, komentarze lub sugestie!źródło
Każde zatwierdzenie jest powiązane z dwiema datami: datą osoby odpowiedzialnej i datą autora. Możesz zobaczyć te daty za pomocą:
Jeśli chcesz zmienić datę autora i datę zatwierdzenia ostatnich 6 zatwierdzeń, możesz po prostu użyć interaktywnej bazy danych:
.
W przypadku wszystkich zatwierdzeń, w których chcesz zmienić datę, zamień
pick
naedit
(lub po prostue
), a następnie zapisz i zamknij edytor.Możesz teraz zmienić każde zatwierdzenie, określając datę autora i datę zatwierdzającego w formacie ISO-8601:
Pierwsza data to data zatwierdzenia, druga to data autora.
Następnie przejdź do następnego zatwierdzenia za pomocą:
Powtarzaj ten proces, dopóki nie zmienisz wszystkich swoich zobowiązań. Sprawdź swoje postępy za pomocą
git status
.źródło
git checkout name-of-current-branch
.--no-edit
w,git commit --amend --no-edit --date=2017-10-08T09:51:07
aby zachować stary komunikat zatwierdzenia.GIT_COMMITTER_DATE
zgodnie z opisem tutaj eddmann.com/posts/…źródło
Opierając się na theosp „s odpowiedź , napisałem skrypt o nazwie
git-cdc
(na bieżąco zmian commit), że umieścić w moimPATH
.Nazwa jest ważna: w
git-xxx
dowolnym miejscuPATH
możesz wpisać:Ten skrypt jest bash, nawet w systemie Windows (ponieważ Git będzie go wywoływał ze środowiska msys )
Dzięki temu możesz wpisać:
Spowoduje to zresetowanie daty autora / zatwierdzenia zatwierdzenia przed HEAD (
@~
) do określonej daty.Spowoduje to zresetowanie daty autora / zatwierdzenia przed HEAD (
@~
) na tę samą godzinę, ale 2 dni temu.Ilya Semenov wspomina w komentarzach :
źródło
git cdc @~ "2014-07-04 20:32:45
przeciwnym razie nie rozpoznałby godziny i dlatego uzyskałby czas 00:00:00 (staje się trzecim argumentem).brew install coreutils
), dodać go do PATH (PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
), a następnie użyć składni „2 dni temu”.2 days ago
” działa?Jak edytować wiele dat zatwierdzenia
Inne odpowiedzi nie są zbyt wygodne w przypadku edycji kilku dat zatwierdzenia. Wróciłem do tego pytania po kilku latach, aby podzielić się techniką.
Aby zmienić daty ostatnich 4 zatwierdzeń:
Zmodyfikuj bazę w następujący sposób, wstawiając
exec
wiersze, aby odpowiednio zmodyfikować daty:źródło
--amend
/--date
. Prostsze niż moja odpowiedź przy użyciu zmiennych środowiskowych. Pozytywne.GIT_AUTHOR_DATE
tylko aktualizacje .exec git commit --amend --no-edit --date "now"
jeśli jest to poprzednie ostatnie zatwierdzenie.
jeśli już naciskasz na początek i możesz wymusić użycie:
jeśli nie możesz wymusić wypychania i jeśli jest on popychany, nie możesz zmienić zatwierdzenia! .
źródło
Oto wygodny alias, który zmienia czasy zatwierdzenia i autora ostatniego zatwierdzenia na czas zaakceptowany przez
date --date
:Stosowanie:
git cd <date_arg>
Przykłady:
Edycja: Oto bardziej zautomatyzowana wersja, która sprawdza, czy indeks jest czysty (bez niezatwierdzonych zmian) i ponownie wykorzystuje ostatni komunikat zatwierdzenia lub w przeciwnym razie zawiedzie (niezawodny):
źródło
Utworzyłem ten pakiet npm, aby zmienić datę starych zatwierdzeń.
https://github.com/bitriddler/git-change-date
Przykładowe użycie:
Zostaniesz poproszony o wybranie zatwierdzenia, które chcesz zmodyfikować, a następnie o wprowadzenie nowej daty.
Jeśli chcesz zmienić zatwierdzenie przez określony skrót, uruchom to
git-change-date --hash=[hash]
źródło
Poniższa funkcja bash zmieni czas każdego zatwierdzenia w bieżącym oddziale.
Uważaj, aby nie używać, jeśli już wypchnąłeś zatwierdzenie lub korzystasz z zatwierdzenia w innej gałęzi.
źródło
if [[ -z "$commit" ]]
->if [[ -z "$date_timestamp" ]]
GIT_COMMITTER_DATE=
na końcu metody, aby zapobiec dalszym ręcznym zatwierdzeniom w celu zachowania określonej daty.Aby zmienić zarówno datę autora, jak i datę zatwierdzenia:
źródło
Jeśli chcesz uzyskać dokładną datę kolejnego zatwierdzenia (powiedz, że dokonałeś edycji bazy zmian w bazie danych i chcesz, aby miała datę oryginalnej wersji sprzed bazy):
To poprawia datę zatwierdzenia HEAD, która jest dokładnie datą zatwierdzenia a383243 (dołącz więcej cyfr, jeśli występują niejednoznaczności). Pojawi się także okno edytora, abyś mógł edytować komunikat zatwierdzenia.
To jest data autora, na której zwykle Ci zależy - zobacz inne odpowiedzi dotyczące daty osoby odpowiedzialnej.
źródło
Jeśli chcesz wykonać zaakceptowaną odpowiedź ( https://stackoverflow.com/a/454750/72809 ) w standardowym wierszu poleceń systemu Windows, potrzebujesz następującego polecenia:
Uwagi:
^
), ale mi się nie udało.Bardzo dziękuję na blogu Colina Svingena . Mimo że jego kod nie działał dla mnie, pomógł mi znaleźć właściwe rozwiązanie.
źródło
Jeśli zatwierdzenie nie zostało jeszcze wypchnięte, mogę użyć czegoś takiego:
po tym git bash otwiera edytor z już zastosowaną datą, więc musisz go tylko zapisać, wpisując w trybie komend VI edytora „: wq” i możesz go wcisnąć
źródło
--no-edit
opcji.git push -f
(wymuszonej aktualizacji). Może to jednak mieć skutki uboczne. (szczególnie jeśli wiele osób ma lokalne klony repozytorium)Dla osób korzystających z PowerShell
Kredyt na https://mnaoumov.wordpress.com/2012/09/23/git-change-date-of-commit/
źródło
Jest już wiele świetnych odpowiedzi, ale kiedy chcę zmienić datę wielu zatwierdzeń w ciągu jednego dnia lub miesiąca, nie znajduję właściwej odpowiedzi. Tworzę więc nowy skrypt z wyjaśnieniem, mam nadzieję, że pomoże to komuś:
Data zostanie zmieniona:
źródło