Bash Git: Raute entfernen?

CyborgBeta

Banned
Registriert
Jan. 2021
Beiträge
3.958
Ich habe hier Mist gebaut (git log --graph --pretty=oneline --abbrev-commit --all):

1730143412824.png


Noch ist alles lokal (das bleibt auch so), und ich habe vorsichtshalber ein Backup angelegt.

Ich möchte das gerne linear haben, ohne Rauten.

Das heißt konkret, das zweite Grüne soll direkt nach c0e6cdf kommen (also zwischen c0e... und 7f7... stehen).

Wie ginge das?
 
Sieht für mich eher nach einem Asterisk aus ist aber aus dem begrenzten Ausschnitt schwer zu erkennen.

*
 
  • Gefällt mir
Reaktionen: GTrash81, BFF und CyborgBeta
also ich hab mir git so noch nie angesehen - kannst du ca beschreiben, was eigentlich dein problem oder die aufgabe wäre? das mit rauten oder ähnliches hab ich noch nie gehört.
 
  • Gefällt mir
Reaktionen: BeBur, sh., GTrash81 und 2 andere
CyborgBeta schrieb:
Umgangssprachlich wird das auch als Raute bezeichnet.

Falsch.
Hashtag # ist der neue Begriff fuer die Raute #.
Das was Du da hast * ist das Asteriks oder das Sternchen (bei den Tippsen).
 
  • Gefällt mir
Reaktionen: breedmaster, konkretor, SaschaHa und 2 andere
Ich sehe da auch ein Sternchen (Asteriks).
Scheint eine Art Gliederung oder ähnlich zu sein.
 
  • Gefällt mir
Reaktionen: GTrash81
Das ganze ist ja eine Art Branch-Visualisierung. Gibt es noch etwas mehr Infos was das eigentliche Problem ist? In den falschen branch committed z.B.
 
SpartanerTom schrieb:
nach einem Asterisk aus
Danke, ja, Asterisk.

Habs gerade hinbekommen:

1730146123214.png


git co 01_x
git rebase --onto=01 01_x

Zweites Problem: c0e6... muss im grünen Pfad ganz nach oben ... (fdda... ist main).
 
Er scheint diesen "Weg" zu meinen, nicht das Sternchen, das auch da ist.
2024-10-28_21-11.png
 
  • Gefällt mir
Reaktionen: jlnprssnr, CyborgBeta und GTrash81
Mir ist die konkrete Aufgabenstellung auch noch nicht ganz klar. Suchst du so etwas wie Rebase?
Es heißt übrigens Asterisk, hat nichts mit irgendeinem rebellischen Gallier zu tun :p

Edit: ah, war zu lahm. Aber Rebase wäre vermutlich auch für die nächste Aufgabe richtig, schaue dir mal „Interactive Rebase“ an.
 
  • Gefällt mir
Reaktionen: CyborgBeta
Habs jetzt hinbekommen.

So möchte ich das haben:

Code:
* 0f3703a :  (HEAD -> 02)
| * daeac6a :  (01_s)
| | * effb0c9 :  (01_r)
| | * 065845d :
| |/
| | * a36730a :  (01_q)
| | * e35f4a5 :
| |/
| | * 9a815e7 :  (01_p)
| | * 5dbb408 :
| |/
| | * b359115 :  (01_o)
| | * 398eeb3 :
| |/
| | * adf33e6 :  (01_n)
| | * f96e6c4 :
| |/
| | * 411b21e :  (01_m)
| | * 900da77 :
| |/
| | * f3ddab7 :  (01_l)
| | * 41d593f :
| |/
| | * 732fcdf :  (01_k)
| | * 924a47a :
| |/
| | * 575676e :  (01_j)
| | * e5a9b45 :
| |/
| | * 021f035 :  (01_i)
| | * 43d7e34 :
| | * 813e509 :
| |/
| | * 1bcf422 :  (01_h)
| | * 1ab3b76 :
| | * c50b152 :
| | * 04bf69d :
| |/
| | * 3acaac5 :  (01_g)
| | * fdf51f3 :
| | * 3c9a8cf :
| |/
| | * c45f1fa :  (01_f)
| | * 40d01f8 :
| | * 843aabc :
| | * a9e7aa5 :
| |/
| | * 646b4ce :  (01_e)
| | * 0d7aabb :
| | * 56a205b :
| |/
| | * 68a38dc :  (01_d)
| | * 37cbed4 :
| |/
| | * e216ce7 :  (01_c)
| | * 8046fe8 :
| |/
| | * 9ad4d62 :  (01_b)
| | * c1bdcaa :
| | * 06aadf6 :
| |/
| | * 184e36d :  (01_a)
| | * b911abf :
| |/
| * 7f7e690 :  (01)
| * c0e6cdf :
|/
* 6f258b1 :
* fdda2d1 :  (main)
* 3d4a5a6 :
...

01 und 02 basieren auf main.

01_a usw. basieren jeweils auf 01.

Gleiches soll dann auch bei 02 sein (da kommen dann noch 02_a usw. hinzu).

Geschafft hatte ich das jetzt mit rebase onto, git commit --allow-empty -m "Empty test commit" und git rebase -i HEAD~x und squash (alles in der richtigen Reihenfolge).

Ich bin aber noch nicht sicher, ob ich in 01_s jetzt versehentlich etwas gelöscht habe. 😬
Ergänzung ()

Ich habe mich zu früh gefreut:

Switched to branch '01'
Your branch is ahead of 'main' by 3 commits.
 
Zuletzt bearbeitet:
also bevor ich mich mit sowas rumschlag mach ich git reset und füg die gewünschten commits neu ein.
 
  • Gefällt mir
Reaktionen: BeBur, ReignInBlo0d und CyborgBeta
Ja, wie gesagt, das Ganze ist nicht gepusht, weil es keinen Remote/Upstream mehr gibt, und ich arbeite auf meiner lokalen Kopie.

Leider sind die Änderungen in "1_s" jetzt weg, oder diese wurden gestasht, ohne dass ich das weiß.
 
netzgestaltung schrieb:
also bevor ich mich mit sowas rumschlag mach ich git reset und füg die gewünschten commits neu ein.
Ich probier immer erstmal noch ne halbe Stunde herum. Manchmal klappt es dann, aber auf jeden Fall lernt man was dabei. Ich finde es schrecklich, wenn wir (=Software-Entwickler) unsere Tools nur laienhaft bedienen. Bei Git ist da ja aber leider fast schon unausweichlich.
Und ja ich weiß, jetzt kommen die Git-Experten raus und erzählen was anderes :p.
git switch und restore lassen mich zumindest hoffen, dass es aufwärts geht.
 
  • Gefällt mir
Reaktionen: CyborgBeta
Mir hat ein Script etwas geholfen:

Bash:
#!/bin/sh
for branch in $(git branch -l 01_*)
do
printf "Testing: %s\n" "$branch"
git co "$branch"
if git rebase --onto 01 "$branch"^ -X theirs ; then
printf "Ok 1\n"
else
printf "Not ok 1\n"
git status | grep 'deleted by us' | awk '{print $4}' | xargs git rm
git add .
if git rebase --continue ; then
printf "Ok 2\n"
else
printf "Not ok 2\n"
exit
fi
fi
done

Das Repo ist jetzt aber leider hin, weil "rebase --onto " zusätzlich alle commits im jeweiligen branch zusammenfasst.
Ergänzung ()

Eigentlich hatte ich nach dieser https://stackoverflow.com/a/43310988 bzw. dieser https://stackoverflow.com/a/32315157 Antwort gesucht, also wie man einen Commit in der Vergangenheit einfügen kann, und die History dabei intakt bleibt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: dasBaum_CH und CyborgBeta
Ja, die Raute (oder Diamant oder Hashtag oder der "Crossover") ist erst entstanden, als ich etwas falsch gemacht hatte. Aber anscheinend war ich dann nicht in der Lage, das rückgängig zu machen oder zu fixen. Asche auf mein Haupt. 😅 ... Man kann zwar über den git reflog einiges einsehen und rückgängig machen, aber auch dabei kann man etwas falsch machen. Und auch jedes reset und rebase ist anscheinend gefährlich, weil man dadurch "Daten" verlieren kann.

Aber, ich würde behaupten, keiner ist wirklich Meister in Git (außer der/die Erfinder vielleicht).
 
Git ist halt dazu gedacht ALLES mit zu loggen.
Die Lösungen sind immer entweder neue Commits oder zurück zu Punkt X
 
  • Gefällt mir
Reaktionen: dasBaum_CH
Zurück
Oben