Sie setzen HEAD auf den fünften Commit im Repo zurück und führen dann eine Zusammenführung mit dem Master-Zweig durch.
Der aktuelle HEAD des aktuellen Branches wird fünf Commits zurückgesetzt, dann werden frühere Commits zu einem einzigen Commit zusammengefasst.
Sie löschen die letzten fünf Commits.
Sie führen die letzten fünf Commits in einen neuen Branch zusammen.
Erklärung:
git reset --hard HEAD~5 setzt den aktuellen Branch auf den Commit direkt vor den letzten 5 zurück (siehe man gitrevisions für Details zu dieser Notation und anderen coolen Alternativen wie HEAD@{2 days ago}). Da es sich um ein hartes Zurücksetzen handelt, werden auch alle Änderungen im Arbeitsverzeichnis überschrieben. Siehe man git-reset.
git merge --squash HEAD@{1} HEAD@{1} ist der Ort, an dem der Branch gerade vor dem vorherigen Befehl war (nochmals, siehe man gitrevisions). Dieser Befehl setzt den Zustand des Index auf den Stand, den er direkt nach einer Zusammenführung von diesem Commit hätte. Diese gesamte Operation könnte eine Möglichkeit sein, 5 Commits von einem Branch zu nehmen, in dem du ein neues Feature gestartet hast, und sie zu einem einzigen, aussagekräftigen Commit zusammenzufassen.
Q4. Dein aktuelles Projekt hat mehrere Branches; master, beta und push-notifications. Du hast gerade das Benachrichtigungs-Feature im push-notification-Branch fertiggestellt und möchtest es in den Beta-Branch übernehmen. Wie kannst du das erreichen?
Wechsel zum push-notifications-Branch und führe git merge beta aus
Wechsel zum Master-Branch und führe git merge beta -> push-notifications aus
Lösche den push-notifications-Branch und er wird automatisch in den Master-Branch übernommen
Wechsel zum Beta-Branch und führe git merge push-notifications aus
Der Commit wird für die Veröffentlichung im feature-user-location-Branch markiert
Ein Commit wird von seinem ursprünglichen Branch zum feature-user-location-Branch kopiert
Der Commit wird als neuer HEAD des Commit-Verlaufs ausgewählt
Ein Commit wird vom feature-user-location-Branch zum Master-Branch kopiert
Der Branch wird auf den feature-user-location-Branch umgeschaltet, und der angegebene Commit wird auf den Branch angewendet.
Erklärung:
'git checkout feature-user-location' wechselt zum 'feature-user-location'-Branch.
'git cherry-pick kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231' wendet die Änderungen des angegebenen Commits ('kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231') auf den aktuellen Branch (feature-user-location) an. Dadurch wird der Commit effektiv von seinem ursprünglichen Branch zum feature-user-location-Branch kopiert.
Diese Sequenz von Befehlen führt also ein Cherry-Picking eines bestimmten Commits auf den feature-user-location-Branch durch.
Q8. Was macht der folgende Befehl im Git-Repository?
git reset --soft HEAD^
Er löscht alle vorherigen Commits und setzt den Repository-Verlauf auf seinen ursprünglichen Zustand zurück.
Er setzt den Arbeitsbranch auf den ersten Commit zurück.
Er behält HEAD beim aktuellen Commit, löscht jedoch alle vorherigen Commits.
Er setzt HEAD auf den vorherigen Commit zurück und lässt die Änderungen des ungeschehen gemachten Commits im Staging-Bereich.
Q9. Du findest einen Fehler in deinem Projekt, kannst aber nicht feststellen, wo er im Commit-Verlauf eingeführt wurde. Wie würdest du dieses Problem diagnostizieren?
Manuell durchsuchst du deinen Commit-Verlauf.
Verwende git search -diff, um alle Commits im Verlauf deines Repositorys zu vergleichen.
Führe einen Git-Rebase durch, um den fehlerhaften Commit zu finden.
Verwende git bisect, um den fehlerhaften Commit mit einem früheren Commit zu vergleichen, der wie erwartet funktioniert.
Eine Zeile, die mit # beginnt, dient als Kommentar. Daher tut # .swift nichts. Siehe man gitignore.
Q17. Nachdem du Änderungen an einem lokalen Repository vorgenommen hast, führst du den folgenden Befehl aus. Was wird dies tun?
git commit -a -m "Refactor code base"
Nichts, du kannst nicht mehrere Optionen im selben Befehl verwenden
Fügt alle neuen Dateien dem Staging-Bereich hinzu
Committe alle neuen Dateien mit einer Nachricht
Fügt alle geänderten Dateien dem Staging-Bereich hinzu und committet sie dann mit einer Nachricht
Q18. Nachdem du deinen Git-Status überprüft hast, erhältst du die folgende Ausgabe, die die Datei beta-notes.js im Commit, aber auch nicht im Staging-Bereich zeigt. Wie kann diese Situation auftreten?
Change to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: beta-notes.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout --<file>..." to discard changes in working directory)
modified: beta-notes.js
Es gab zwei Kopien von beta-notes.js, aber eine wurde gelöscht
beta-notes.js wurde gestaged und danach geändert, was zwei verschiedene Versionen der Datei erzeugte
Zwei Kopien von beta-notes.js wurden erstellt, aber nur eine wird verfolgt
Es gibt zwei verfolgte Kopien von beta-notes.js, aber eine wurde aus dem Commit entfernt
Hinweis: - Der Befehl pull ist fetch gefolgt von entweder merge oder rebase (in diesem Fall merge). Wir möchten nicht zusammenführen. Zusammenführen wäre eine Aktion für unser Repository. Wir möchten nur unsere lokalen Dateien überschreiben.