Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  2 1283
Dataingeniør
Zarlach's Avatar
Hei, jeg skulle fjerne et directory som jeg nylig satte i .gitignore, men av en feil fjernet jeg absolutt alle filer fra git, slik at når jeg gjorde en commit og push, ble alle filene i git repo fjernet. Jeg gjorde en git add, commit og push for å legge de til tilbake, slik at filene er i orden, men det vises jo i commit history.

Dette er mange commits siden, så jeg lurer på om det er mulig å fjerne denne "feilen" og beholde alle commits etter dette.
Bruk git rebase. Her er et eksempel:

Kode

git init

# to vanlige commits
touch superman.txt && git add superman.txt && git commit
touch batman.txt && git add batman.txt && git commit

# slett filene og commit med et uhell
mkdir backup && cp superman.txt batman.txt backup
git rm superman.txt batman.txt && git commit

# gjennoprett filene og commit
cp backup/* .
git add superman.txt batman.txt && git commit

# ny commit
touch aquaman.txt && git add aquaman.txt && git commit

# sjekk loggen for å finne ut hvor mange commits det er siden. 
git log

# rebase de siste 5 commitene interaktivt
git rebase -i HEAD~5
Nå får du opp to filer etter hverandre. I den første endrer du "pick" til "squash" på commitene som skal kombineres med forrige commit.

Kode

  1 pick b0d9203 legg til superman
  2 squash 120e91b fjernet alt med et uhell
  3 squash 8751f43 legg alt tilbake igjen
  4 pick f55040a legg til aquaman
I den neste oppgir du hva den nye commit-meldingen blir. Her kommenterte jeg ut commitene jeg ikke vil ha. Om du ikke gjør dette blir alle meldingene kombinert inn i samme commit.

Kode

  1 # This is a combination of 3 commits.
  2 # The first commit's message is:
  3 legg til superman
  4
  5 # This is the 2nd commit message:
  6
  7 # fjernet alt med et uhell
  8
  9 # This is the 3rd commit message:
 10
 11 # legg alt tilbake igjen
Nå gjenstår det å force-pushe. Hvis det er andre som bruker repositoriet må du avtale det med alle andre brukere, med mindre du er teit.

(Utestet, siden jeg ikke gadd)

Kode

git push origin master --force
Dataingeniør
Zarlach's Avatar
Trådstarter
Fungerte fint når jeg prøvde å fjerne commits midt i history, men denne commit feilen skjedde rett etter første commit og jeg får denne meldingen etter å sette begge til squash:

Kode

$ git rebase -i --root

You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^".
Og allt blir slettet fra mappa.

Listen over commits ser slik ut:

Kode

pick 580d2e5 First commit
squash 710a28a Removed folders which has been added to gitignore
squash 52e2896 Readding files
pick df5bb36 Wireframe added
... osv ...
Er det mulig å gjøre slik at først commit flyttes til der jeg legger tilbake filer?
Sist endret av Zarlach; 23. oktober 2015 kl. 17:03. Grunn: Automatisk sammenslåing med etterfølgende innlegg.