remove - git tagging best practices




Was bedeutet es, Commits in git zu quetschen? (2)

Was bedeutet Squashing Commit in Git? Wie mache ich Squash-Commits in Github?

Ich bin neu bei Git und habe darum gebeten, einem neuen Bug im Coala-Analyzer zugewiesen zu werden. Ich habe den Fehler behoben und nun wurde ich gebeten, meine Commits zu quetschen. Wie mache ich es?


Der Befehl "rebase" bietet im Modus " --interactive (oder " -i ) einige fantastische Optionen, und eine der am häufigsten verwendeten ist die Fähigkeit, Commits zu quetschen. Dies bedeutet, dass kleinere Commits zu größeren kombiniert werden. Dies kann nützlich sein, wenn Sie die Arbeit des Tages beenden oder Ihre Änderungen einfach anders verpacken möchten. Wir werden darüber nachdenken, wie Sie dies einfach tun können.

Ein Wort zur Vorsicht: Tun Sie dies nur bei Commits, für die noch kein externes Repository gepusht wurde. Wenn andere Benutzer die zu löschenden Commits auf der Grundlage von Workoffs ausgeführt haben, können zahlreiche Konflikte auftreten. Schreiben Sie Ihren Verlauf nur nicht neu, wenn er für andere freigegeben wurde.

Nehmen wir also an, Sie haben gerade ein paar kleine Commits gemacht und möchten ein größeres Commit daraus machen. Die Historie unseres Repository sieht derzeit so aus:

Die letzten 4 Commits wären viel glücklicher, wenn sie zusammengeführt würden. Machen wir also genau das durch interaktives Rebasing:

$ git rebase -i HEAD~4

pick 01d1124 Adding license
pick 6340aaa Moving license into its own file
pick ebfd367 Jekyll has become self-aware.
pick 30e0ccb Changed the tagline in the binary, too.

# Rebase 60709da..30e0ccb onto 60709da
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Hier sind also ein paar Dinge passiert. Zuallererst sagte ich Git, dass ich mit den letzten vier Commits, von denen HEAD zu HEAD ~ 4 gehört, einen Rebase durchführen möchte. Git hat mich jetzt in einen Editor mit dem obigen Text und einer kleinen Erklärung dessen, was getan werden kann, versetzt. Auf diesem Bildschirm stehen Ihnen zahlreiche Optionen zur Verfügung, aber im Moment werden wir nur alles zu einem Commit zusammenfassen. Wenn Sie also die ersten vier Zeilen der Datei in diese ändern, ist dies der Trick:

pick 01d1124 Adding license
squash 6340aaa Moving license into its own file
squash ebfd367 Jekyll has become self-aware.
squash 30e0ccb Changed the tagline in the binary, too.

Grundsätzlich weist dies Git an, alle vier Festschreibungen zur ersten Festschreibung in der Liste zu kombinieren. Sobald dies erledigt und gespeichert ist, erscheint ein weiterer Editor mit den folgenden Informationen:

# This is a combination of 4 commits.
# The first commit's message is:
Adding license

# This is the 2nd commit message:

Moving license into its own file

# This is the 3rd commit message:

Jekyll has become self-aware.

# This is the 4th commit message:

Changed the tagline in the binary, too.

    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # Explicit paths specified without -i nor -o; assuming --only paths...
    # Not currently on any branch.
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #   new file:   LICENSE
    #   modified:   README.textile
    #   modified:   Rakefile
    #   modified:   bin/jekyll
    #

Da wir so viele Commits kombinieren, können Sie mit Git die Nachricht des neuen Commits basierend auf den restlichen Commits ändern, die an dem Prozess beteiligt sind. Bearbeiten Sie die Nachricht nach Belieben, speichern Sie sie und beenden Sie sie. Sobald dies erledigt ist, wurden Ihre Commits erfolgreich gequetscht!

Created commit 0fc4eea: Creating license file, and making jekyll self-aware.
 4 files changed, 27 insertions(+), 30 deletions(-)
  create mode 100644 LICENSE
    Successfully rebased and updated refs/heads/master.

Und wenn wir uns die Geschichte noch einmal ansehen ...

Das war also bisher relativ schmerzfrei. Wenn Sie während des Rebases auf Konflikte stoßen, sind diese in der Regel recht einfach zu lösen und Git führt Sie so weit wie möglich durch. Die Grundlagen hierfür sind, den fraglichen Konflikt zu beheben, die Datei git add und dann git rebase --continue den Prozess git rebase --continue . Wenn Sie einen git rebase --abort Sie git rebase --abort zu Ihrem vorherigen Status zurück, wenn Sie möchten. Wenn Sie aus irgendeinem Grund ein Commit in der Rebase verloren haben, können Sie das Reflog verwenden, um es zurückzugewinnen.

Details finden Sie unter diesem link .






github