Jawaban untuk Bagaimana mengubah komitmen yang ada dan tidak dicuri? menjelaskan cara untuk mengubah pesan komit sebelumnya yang belum didorong ke atas. Pesan baru mewarisi stempel waktu dari komitmen asli. Ini tampaknya logis, tetapi apakah ada cara untuk mengatur ulang waktunya?
git
timestamp
commit
git-rewrite-history
Dhskjlkakdh
sumber
sumber
git commit --amend --reset-author
Jawaban:
Gunakan
git filter-branch
dengan filter env yang menetapkanGIT_AUTHOR_DATE
danGIT_COMMITTER_DATE
untuk hash spesifik dari komit yang ingin Anda perbaiki.Ini akan membatalkan itu dan semua hash di masa depan.
Contoh:
Jika Anda ingin mengubah tanggal komit
119f9ecf58069b265ab22f1f97d2b648faf932e0
, Anda dapat melakukannya dengan sesuatu seperti ini:sumber
Anda dapat melakukan rebase interaktif dan memilih edit untuk komit yang ingin Anda ubah tanggalnya. Ketika proses rebase berhenti untuk mengubah komit yang Anda ketikkan misalnya:
Setelah itu Anda melanjutkan rebase interaktif Anda.
UPDATE (sebagai tanggapan atas komentar studgeek): untuk mengubah tanggal komit dan bukan tanggal penulis:
Baris di atas menetapkan variabel lingkungan GIT_COMMITTER_DATE yang digunakan dalam amend komit.
Semuanya diuji di Git Bash.
sumber
rebase
, Anda bisa melakukannyagit commit --amend
+ var fixedDate = strftime(new Date(), "%c"); + var result = shelljs.exec("git commit --amend --date=\"" + fixedDate + "\" --no-edit");
Cara yang lebih baik untuk menangani semua saran ini dalam satu perintah adalah
Ini akan menetapkan komit terakhir dan tanggal penulis menjadi "sekarang."
sumber
LANG= GIT_COMMITTER_DATE="`date`" git commit --amend --date "`date`"
--date "now"
. Git> = 2 akan menafsirkannya.Lakukan saja
git commit --amend --reset-author --no-edit
. Untuk komit yang lebih lama, Anda dapat melakukan rebase interaktif dan memilihedit
untuk komit yang tanggalnya ingin Anda ubah.Kemudian ubah komit dengan
--reset-author
dan--no-edit
untuk mengubah tanggal penulis ke tanggal saat ini:Terakhir, lanjutkan dengan rebase interaktif Anda:
sumber
--reset-author
, ini baru dalam git 1.6.6 (ref gitlog.wordpress.com/2010/01/13/git-1-6-6 )--reset-author
akan mengatur ulang Penulis dan Tanggal Penulis ke sekarang.Saya menulis naskah dan paket Homebrew untuk ini. Sangat mudah dipasang, Anda dapat menemukannya di
PotatoLabs/git-redate
halaman GitHub .Sintaksis:
Anda hanya perlu menjalankan
git redate
dan Anda akan dapat mengedit semua tanggal dalam vim dari 5 commit terbaru (ada juga-c
opsi untuk berapa banyak commit yang ingin Anda kembalikan, itu hanya default ke 5). Beri tahu saya jika Anda memiliki pertanyaan, komentar, atau saran!sumber
Setiap komit dikaitkan dengan dua tanggal, tanggal komiter dan tanggal penulis. Anda dapat melihat tanggal-tanggal ini dengan:
Jika Anda ingin mengubah tanggal penulis dan tanggal komiter dari 6 komitmen terakhir, Anda dapat menggunakan rebase interaktif:
.
Untuk semua komitmen di mana Anda ingin mengubah tanggal, ganti
pick
denganedit
(atau hanyae
), lalu simpan dan keluar dari editor Anda.Anda sekarang dapat mengubah setiap komit dengan menentukan tanggal penulis dan tanggal committer dalam format ISO-8601:
Tanggal pertama adalah tanggal komit, yang kedua adalah tanggal penulis.
Lalu pergi ke komit berikutnya dengan:
Ulangi proses ini sampai Anda mengubah semua komitmen Anda. Periksa perkembangan Anda dengan
git status
.sumber
git checkout name-of-current-branch
.--no-edit
digit commit --amend --no-edit --date=2017-10-08T09:51:07
untuk menjaga tua pesan commit.GIT_COMMITTER_DATE
sebagaimana dijelaskan di sini eddmann.com/posts/…sumber
Membangun theosp 's jawaban , saya menulis sebuah script yang disebut
git-cdc
(untuk tanggal perubahan komit) yang saya dimasukkan ke dalam sayaPATH
.Nama itu penting:
git-xxx
di mana saja di AndaPATH
memungkinkan Anda mengetik:Skrip itu ada di bash, bahkan di Windows (karena Git akan memanggilnya dari lingkungan msys -nya )
Dengan itu, Anda dapat mengetik:
Itu akan mengatur ulang tanggal komitmen / komit sebelum HEAD (
@~
) ke tanggal yang ditentukan.Itu akan mengatur ulang tanggal pembuat / komit sebelum komit (
@~
) ke jam yang sama, tetapi 2 hari yang lalu.Ilya Semenov menyebutkan dalam komentar :
sumber
git cdc @~ "2014-07-04 20:32:45
jika tidak maka tidak akan mengenali waktu dan karenanya memperoleh waktu 00:00:00 (itu menjadi argumen ketiga).brew install coreutils
), menambahkannya ke PATH (PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
) dan kemudian menggunakan sintaks "2 hari yang lalu".2 days ago
" bekerja?Cara Mengedit Beberapa Tanggal Komit
Jawaban lain sangat tidak nyaman untuk mengedit beberapa tanggal komit. Saya kembali ke pertanyaan ini setelah beberapa tahun untuk berbagi teknik.
Untuk mengubah tanggal dari 4 komitmen terakhir:
Edit rebase sebagai berikut, masukkan
exec
baris untuk mengubah tanggal sesuai kebutuhan:sumber
--amend
/--date
opsi yang bagus. Lebih sederhana daripada jawaban saya sendiri menggunakan variabel lingkungan. Terpilih.GIT_AUTHOR_DATE
hanya pembaruan .exec git commit --amend --no-edit --date "now"
jika itu adalah komit terakhir sebelumnya.
jika Anda sudah mendorong ke orgin dan dapat memaksa menggunakan:
jika Anda tidak dapat memaksa dan jika didorong, Anda tidak dapat mengubah komit! .
sumber
Berikut ini adalah alias yang nyaman yang mengubah waktu komit dan penulis dari komit terakhir ke waktu yang diterima oleh
date --date
:Pemakaian:
git cd <date_arg>
Contoh:
Sunting: Ini adalah versi yang lebih otomatis yang memeriksa apakah indeksnya bersih (tidak ada perubahan yang tidak dikomit) dan menggunakan kembali pesan komit terakhir, atau gagal jika tidak (pembodohan):
sumber
Saya membuat paket npm ini untuk mengubah tanggal dari komitmen lama.
https://github.com/bitriddler/git-change-date
Penggunaan sampel:
Anda akan diminta untuk memilih komit yang ingin Anda modifikasi kemudian untuk memasukkan tanggal baru.
Jika Anda ingin mengubah komit dengan hash tertentu jalankan ini
git-change-date --hash=[hash]
sumber
Fungsi bash berikut akan mengubah waktu komit di cabang saat ini.
Berhati-hatilah untuk tidak menggunakan jika Anda sudah mendorong komit atau jika Anda menggunakan komit di cabang lain.
sumber
if [[ -z "$commit" ]]
->if [[ -z "$date_timestamp" ]]
GIT_COMMITTER_DATE=
pada akhir metode untuk mencegah komitmen manual lebih lanjut untuk menjaga tanggal yang ditentukan.Untuk mengubah tanggal penulis dan tanggal komitmen:
sumber
Jika Anda ingin mendapatkan tanggal pasti dari komit lain (katakanlah Anda rebase, edit komit dan ingin komit tersebut memiliki tanggal versi pra-rebase asli):
Ini mengoreksi tanggal dari komitmen HEAD menjadi persis tanggal dari komitmen a383243 (termasuk lebih banyak digit jika ada ambiguitas). Ini juga akan memunculkan jendela editor sehingga Anda dapat mengedit pesan komit.
Itu untuk tanggal penulis yang biasanya Anda perhatikan - lihat jawaban lain untuk tanggal pengendara.
sumber
Jika Anda ingin melakukan jawaban yang diterima ( https://stackoverflow.com/a/454750/72809 ) di baris perintah Windows standar, Anda memerlukan perintah berikut:
Catatan:
^
), tetapi saya tidak berhasil.Terima kasih banyak untuk posting blog oleh Colin Svingen . Meskipun kodenya tidak berfungsi untuk saya, itu membantu saya menemukan solusi yang tepat.
sumber
Jika komit belum mendorong maka saya dapat menggunakan sesuatu seperti itu:
setelah itu git bash membuka editor dengan tanggal yang sudah diterapkan sehingga Anda hanya perlu menyimpannya dengan mengetikkan mode perintah editor VI ": wq" dan Anda dapat mendorongnya
sumber
--no-edit
opsi.git push -f
(pembaruan paksa). Itu mungkin memiliki efek samping. (terutama jika banyak orang memiliki klon repositori lokal)Bagi yang menggunakan Powershell
Kredit untuk https://mnaoumov.wordpress.com/2012/09/23/git-change-date-of-commit/
sumber
Sudah ada banyak jawaban bagus, tetapi ketika saya ingin mengubah tanggal untuk banyak komit dalam satu hari atau dalam satu bulan, saya tidak menemukan jawaban yang tepat. Jadi saya membuat skrip baru untuk ini dengan penjelasan, semoga akan membantu seseorang:
Tanggal akan diubah:
sumber