Negalima sukurti įsipareigojimo, jei failo pavadinimo argumentas, priskirtas maišos objektui, skiriasi nuo pradinio failo pavadinimo.

Žaisti su git santechnikos komandomis, kad geriau suprastume savo vidinius mechanizmus. Bandau atgaminti įsipareigojimą nenaudojant komandų git commit . Leiskite sukurti blob :

 $ git init $ echo "I'm an apple" > apple.txt $ git hash-object -w apple.txt 2d1b0d728be34bfd5e0df0c11b01d61c77ccdc14 

Dabar pridėkite jį prie indekso, tačiau kitokiu failo pavadinimu:

 $ git update-index --add --cacheinfo 100644 2d1b0d728be34bfd5e0df0c11b01d61c77ccdc14 orange.txt 

Čia yra git status išvestis:

 $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: orange.txt Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deleted: orange.txt Untracked files: (use "git add <file>..." to include in what will be committed) apple.txt 

Kas čia vyksta?

„apple.txt“ vis dar egzistuoja, bet nėra stebima, kas man atrodo normalu, nes daviau SHA-1 blob objektui, kuriame yra tik failo turinys.

Leiskite tęsti ir rašyti medį:

 $ git write-tree abbb70126eb9e77aaa65efbe0af0330bda48adf7 $ git cat-file -p abbb70126eb9e77aaa65efbe0af0330bda48adf7 100644 blob 2d1b0d728be34bfd5e0df0c11b01d61c77ccdc14 orange.txt $ git cat-file -p 2d1b0d728be34bfd5e0df0c11b01d61c77ccdc14 I'm an apple 

Leiskite baigti šią operaciją sukuriant įsipareigojimą, rodantį šį medį:

 $ echo "Add fruit" | git commit-tree abbb70126eb9e77aaa65efbe0af0330bda48adf7 57234c35c0d58713d2b4f57b695043e5331afe58 $ git cat-file -p a4386cb82e1f6d1755e47ace1f378df35df31967 tree abbb70126eb9e77aaa65efbe0af0330bda48adf7 author Gregoire Borel <gregoire.borel@nxxx.xx> 1527001408 +0200 committer Gregoire Borel <gregoire.borel@xxx.xx> 1527001408 +0200 Add fruit 

Dabar, jei git status , rezultatas bus toks pat kaip ir anksčiau. Kodėl? Be to, atrodo, kad įsipareigojimas nebuvo sukurtas:

 $ git log fatal: your current branch 'master' does not have any commits yet 

Ar kažką praleidau?

1
22 мая '18 в 18:10 2018-05-22 18:10 paklausė Grégoire Borel, gegužės 22 d., 18 val., 18:10, 2018-05-22 18:10
@ 2 atsakymai

Jūs padarėte įsipareigojimą, bet neatnaujinote jokių nuorodų į jį. Jūs vis dar išbandote negimusį master pramonę. (Atminkite, kad pagal nutylėjimą „ git log parodo, kas yra patikrinta, ir netgi tada, kai pasakysite, kad jis rodys „viską“, jis linkęs pasiekti tai, kas pasiekiama iš nuorodų.)

Jūs to neparodėte, bet, išleisdami tą commit-tree jis turėjo, jis turėjo išspausdinti standartinę išvestį (ir, atlikdamas testą, po to, kai atlikote veiksmus). Taigi, kalbėdami apie tai kaip <commit-hash> , galėtumėte pasakyti

 git merge <commit-hash> 

Pakeičiantis failo pavadinimas dažniausiai yra raudona silkė. Nei rodyklėje, nei duomenų bazėje niekada nėra objekto, kuris žino apie „ apple.txt “ šiame scenarijuje, todėl apple.txt yra tik nepageidaujamas failas darbo medyje, kaip pastebėjote.


Atnaujinti - kaip papildomą pastabą sukuriate naują įsipareigojimą be tėvų, kuris yra prasmingas, nes jūsų repo dar neįrašė jokių įsipareigojimų (jei teisingai perskaitysiu jūsų scenarijų). Apskritai, jei pridedate naują įsipareigojimą esamam (ir ištrintam) filialui, jums reikia argumento -p HEAD , pvz., -p HEAD ir net tada commit-tree komanda pati neatnaujins filialo.

Jei norite išvengti susiliejimo (naudodamiesi žemesnio lygio komandomis), alternatyva būtų git update-ref , kaip

 git update-ref refs/heads/master 50b7 

(Tai yra šiek tiek pavojingesnė, nes greičiausiai jūs klystate, darant prielaidą, kad žinote, ką darote, net jei padarėte klaidą ... Bet tai yra santechnikos komandų pobūdis).

3
22 мая '18 в 19:14 2018-05-22 19:14 atsakė Marko Adelsbergerio gegužės 22 d., 18 val. 19:14 val

jums vis dar reikia paleisti

 git update-ref refs/heads/master a4386cb82e1f6d1755e47ace1f378df35df31967 

tai užregistruos jūsų naują skląstį kaip dabartinį HEAD

1
22 мая '18 в 19:17 2018-05-22 19:17 atsakymas pateikiamas maks. 630 gegužės 22 d., 18 val. 19:17 val. 19:17

Kiti klausimai apie žymas arba Užduoti klausimą