2016-06-23 3 views
0

Erläuterung:zwei parallele Geschichten in einer Git-Repository - verursachenden git Problemen rebase

ich auf October 15, 2015repository wieder ein Git erstellt, so dass ich eine Art Code-Portfolio für haben würde, wenn ich in etwa 2 bis College gehen Jahre. Im Moment lerne ich, mit mit Hilfe von Udemy zu programmieren, aber sobald ich mit diesem Kurs fertig bin, plane ich, C++ und dann Php zu lernen. Aber das ist natürlich alles außer dem Punkt.

Also heute (June 22, 2016) bemerkte ich, in meinem Git-Repository als ich einige Code von einem der Tutorials drängen, die ich war passiert tun und nur git log laufen alle meine Commits zu sehen und bemerkte etwas wie folgt aus:

git commit tree

Also von dem, was ich habe read und die Informationen, die ich von dieser Erkenntnis gesammelt haben, ist, dass ich etwas falsch und aus diesem Grund wurden zusammen ich mit etwas endete, die oben, wie das Bild aussieht.

Mein nächster Schritt war zu sehen, ob ich den git rebase -i --root Befehl verwenden könnte, um alle Commits zu löschen, die in der blauen Box (im Bild oben) markiert sind. Was natürlich ging gut, bis sie begehen treffen 15 (ca.), wo sie dann eine Fehlermeldung ausspucken, die etwa wie folgt aussieht:

2nd error message

So an diesem Punkt, ich übersprungen nur, dass begehen, indem er git rebase --skip läuft . So etwa zwei weitere Commits vergingen, wenn (rechts in der Warteschlange):

1st error message

Also, natürlich, ich lief git rebase --skip und es nur mit dem Rest der Commits beenden lassen.

Sobald das erledigt war, lief ich einfach git rebase --abort, weil es diese beiden Commits übersprungen hatte. Mein nächster Schritt nach all dem war, im Internet nach Antworten zu suchen. Eine der einzigen guten Antworten, die ich finden konnte, war here. Ich folgte dann der Antwort:

Ich würde vorschlagen, dass Sie zuerst versuchen, Ihre Geschichte zu glätten, um die parallelen Geschichten loszuwerden, und die Verschmelzungsverpflichtungen zu entfernen. Sobald Sie einen streng linearen Verlauf haben, können Sie den Verlauf so umschreiben, dass alle Debugging-Abgänge entfernt werden.

Das einzige Problem war, dass ich konnte nicht herausfinden, wie parallele Geschichten zu entfernen und/oder entfernen merge verpflichtet, denn wenn ich git rebase -i --root laufe ich so etwas wie diese:

pick 9140277 Initial commit 
pick 95b2f3b Made some minor changes to the code to increase usability 
pick d83b165 Converts the folder to a .tar.bz2 and then deletes the folder 
pick 3b755b3 Removed some blank lines at the bottom of the file 
pick e2f2e3e Added the feature to remove files/folders that are older than a certain age 
pick 86b1115 Finished the backup final ftp script for now 
pick bfbbcd4 Removed text from a variable 
pick 2a7cacd Fixed some minor bugs in the code 
pick a943277 Added some new fetures to the script 
pick b31bf66 Removed some unnecessary lines of code 
pick cc2c9f7 Added Countdown Timers and other help to the portfolio 
pick f443919 Fixed a few if statements 
pick d6588a0 Everything is in working order 
pick f8cc756 Renamed some of the files 
pick 6a859f6 Rename backup final ftp.py to backup ftp v.4 (final).py 
pick 2dcdae3 Deleted an unneeded folder 
pick 0c10370 Added 'Lecture 14 Numbers' 
pick 5358b32 Added 'Remove Numbers v.1.py' 
pick 8b95691 Reorganized the repository 
pick 250f94b Added 'Lecture 16 Strings' 
pick 6ebfd31 Changed the numbering of the files 
pick 1f275e4 Added 'Lecture 19 Print Formatting' 
pick b7d6608 Initial commit 
pick 6718968 Made some minor changes to the code to increase usability 
pick c2c58c3 Converts the folder to a .tar.bz2 and then deletes the folder 
pick 19a495f Removed some blank lines at the bottom of the file 
pick c5687a3 Added the feature to remove files/folders that are older than a certain age 
pick 93e9742 Finished the backup final ftp script for now 
pick 589251c Removed text from a variable 
pick 4a7f2d1 Fixed some minor bugs in the code 
pick 4172115 Added some new fetures to the script 
pick 2377980 Removed some unnecessary lines of code 
pick e183900 Added Countdown Timers and other help to the portfolio 
pick dfc9747 Fixed a few if statements 
pick 0fa9983 Everything is in working order 
pick 09abfd7 Renamed some of the files 
pick 051dae3 Rename backup final ftp.py to backup ftp v.4 (final).py 
pick bac2105 Deleted an unneeded folder 
pick e35b6ba Added 'Lecture 14 Numbers' 
pick 60b17e4 Added 'Remove Numbers v.1.py' 
pick c654494 Reorganized the repository 
pick 16e17be Added 'Lecture 16 Strings' 
pick 3f37ca3 Changed the numbering of the files 
pick ab99b1c Added 'Lecture 19 Print Formatting' 
pick 5ea99f2 Added 'Lecture 21 Lists' 
pick b8dba98 Reorganized/Fixed all of the code/comments on all of the lectures that I have done up to this point 
pick ae50e5b Added 'Lecture 23 Dictionaries' 
pick 3306d23 Added 'Lecture 25 Tuples' 
pick 36e22b5 Added 'Lecture 26 Files' 
pick 2fd3983 Removed a gitignore specifier from the .gitignore file 

Das einzige Problem ist, dass Ich sehe die Zusammenführung überhaupt nicht, die so aussehen soll Merge branch 'master' of github.com:Lowe-Man/Portfolio.

Eine letzte Frage, die ich verspreche.Wie kann ich die rote Linie verschwinden, grünen, und dass kleiner Abschnitt dieser blauen Linie darunter eine vollständige lineare Geschichte im Bild zu machen:

wäre sehr dankbar

linear history

Jede Hilfe. Danke, Alex

Antwort

1

Ein Merge-Commit kann weggelassen werden. Sie könnten versuchen git rebase --onto ab99b1c 5ea99f2^ origin/master. Nachdem es fertig ist, ist der Kopf, was Sie wollen, aber es kann in losgelösten HEAD Zustand sein.

Aktualisiert: der Fall zu vereinfachen,

A--B--M--D--E 
     /
O----P 

Hoffen, dass die Vorschau sieht okay (M ist die Zusammenführung von B und P begehen). Sie wollen O P zusammen mit M, und halten nur A B D E.

git rebase --onto B M E 

jetzt ist es wie A-B-D'-E' entfernen.

Aktualisiert vor 2: den anderen Fall zu vereinfachen,

A-B----M-D 
    \  /
    C--- 

C von A und B verschmilzt zu M. Wenn Sie C in Linie AD verschieben möchten,

git rebase --onto B C^ D 

Jetzt bekommen Sie A-B-C'-D'. M ist ein Merge-Commit und wurde entfernt.

Aktualisiert 3: Verwenden Sie git reset und git cherry-pick, um den Job in der 2. Aktualisierung zu tun.

git reset B --hard 
#now we get A-B 

git cherry pick C D 
#now we get A-B-C'-D' 
+0

Was mache ich, nachdem ich 'git rebase --ont ab99b1c 5ea99f2^origin/master' ausgeführt habe? Entschuldigung, ich bin neu bei Git. –

+1

@Alex Wenn es keinen Fehler gibt, führen Sie 'git log --oneline --graph' oder' gitk' aus, um zu überprüfen, ob der aktuelle Verlauf der von Ihnen gewünschten ist. – ElpieKay

+0

Ich kann nicht wirklich sagen, ob das ist was ich will. Ich möchte alle Zusammenführungsverpflichtungen entfernen, um eine lineare Geschichte zu bilden. –