Github Genitore commit commesso dopo il commit figlio?

2

Sto guardando questo commit che è stato eseguito "26 giorni fa" e il commit padre che è stato eseguito "25 giorni fa". In che modo è possibile eseguire il commit del genitore un giorno dopo il commit del bambino?

    
posta Can't Tell 05.04.2016 - 07:27
fonte

2 risposte

1

Git distingue tra authoring una modifica (in realtà scrivendo il codice nella modifica) e commit una modifica (aggiungendo la modifica al repository) e tiene traccia sia dell'autore e committer, così come la data di creazione e la data di commit separatamente. Immagina, per esempio, qualcuno che ti manda una patch via email: lei è l'autore, tu sei "solo" il committer.

Quindi, potrebbe essere che GitHub mostri la data di authoring invece della data di commit (dopotutto, questa è l'informazione più interessante se vuoi trovarla da dove proviene il codice sorgente) e che il commit in questione è stato creato da una patch creata prima del commit del commit padre. Git mostra i dati dell'autore per impostazione predefinita (e riempie i valori dei dati di commit se mancanti).

Inoltre, Git ti consente di sovrascrivere la data di commit.

Esempio per entrambi:

git init

msg='a regular commit'
GIT_COMMITTER_DATE=2011-01-01T00:00:00Z git commit --allow-empty -m"$msg"

msg='commit with author date set before the commit but after parent'
GIT_COMMITTER_DATE=2012-01-01T00:00:00Z git commit --date=2011-07-01T00:00:00Z --allow-empty -m"$msg"

msg='commit with author date set before parent'
GIT_COMMITTER_DATE=2013-01-01T00:00:00Z git commit --date=2011-12-01T00:00:00Z --allow-empty -m"$msg"

msg='commit with commit date set before parent'
GIT_COMMITTER_DATE=2012-07-01T00:00:00Z git commit --allow-empty -m"$msg"

git log

# commit deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
# Author: Joe Random Developer <[email protected]>
# Date:   Tue Apr 5 10:33:10 2016 +0200
# 
#     commit with commit date set before parent
# 
# commit deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
# Author: Joe Random Developer <[email protected]>
# Date:   Thu Dec 1 00:00:00 2011 +0000
# 
#     commit with author date set before parent
# 
# commit deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
# Author: Joe Random Developer <[email protected]>
# Date:   Fri Jul 1 00:00:00 2011 +0000
# 
#     commit with author date set before the commit but after parent
# 
# commit deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
# Author: Joe Random Developer <[email protected]>
# Date:   Tue Apr 5 10:33:10 2016 +0200
# 
#     a regular commit
# 
    
risposta data 05.04.2016 - 10:45
fonte
1

La causa più probabile è che lo sviluppatore del secondo commit ha rebagliato il suo ramo dal master prima della fusione.

Ecco una serie di comandi che verranno riprodotti (il comando branch è un alias che passerà a un ramo esistente o ne creerà uno nuovo, il comando master passa a quello principale):

1   mkdir /tmp/$$
2   cd /tmp/$$
3   git init
4   touch foo
5   git add foo
6   git commit -m "initial commit" foo
7   branch bar
8   touch bar
9   git add bar
10  git commit -m "add bar"
11  master
12  vi foo
13  git commit -m "first change" foo
14  git log
15  branch bar
16  git rebase master
17  git log

Ed ecco l'output del log:

commit 61f2fe8360ceeee15f97b47204ed3205342d1b10
Author: Keith Gregory <redacted>
Date:   Tue Apr 5 06:46:05 2016 -0400

    add bar

commit 6240517ac68610b7b4f7cd72f1a0508b20d2c220
Author: Keith Gregory <redacted>
Date:   Tue Apr 5 06:46:46 2016 -0400

    first change

commit ae094204b813ae217fd74a640634c7e82ecb4732
Author: Keith Gregory <redacted>
Date:   Tue Apr 5 06:45:51 2016 -0400

    initial commit

Se usi il comando cat-file , puoi vedere che il commit 62 è effettivamente il genitore di 61:

> git cat-file -p 61f2fe8360ceeee15f97b47204ed3205342d1b10

tree b8300b3b463ee72eb18f78d6602e0274087597d1
parent 6240517ac68610b7b4f7cd72f1a0508b20d2c220
author Keith Gregory <[email protected]> 1459853165 -0400
committer Keith Gregory <[email protected]> 1459853233 -0400

È inoltre del tutto possibile che gli orologi sulle workstation dei due sviluppatori non fossero sincronizzati. Github non tocca affatto i commit, quindi userà qualsiasi tempo specificato dal committer nel loro commit.

    
risposta data 05.04.2016 - 12:54
fonte

Leggi altre domande sui tag