Πώς μπορείτε να κάνετε το git diff
να δείχνει μόνο τη διαφορά μεταξύ δύο commits, αποκλείοντας τα άλλα commits που βρίσκονται ενδιάμεσα;
μπορείτε απλά να περάσετε τα 2 commits στο git diff όπως :
-> git diff 0da94be 59ff30c > my.patch
-> git apply my.patch
Το να ζητάτε τη διαφορά /μεταξύ/ δύο μεταβιβάσεων χωρίς να συμπεριλαμβάνετε τις μεταβιβάσεις που μεσολαβούν δεν έχει νόημα. Οι κοινοποιήσεις είναι απλά στιγμιότυπα των περιεχομένων του αποθετηρίου- το να ζητάτε τη διαφορά μεταξύ δύο κοινοποιήσεων τις περιλαμβάνει απαραίτητα. Επομένως, το ερώτημα που τίθεται είναι, τι πραγματικά ψάχνετε;
Όπως πρότεινε ο William, το cherry-picking μπορεί να σας δώσει το delta ενός commit που επαναπροσδιορίζεται πάνω σε ένα άλλο. Δηλαδή:
$ git checkout 012345
$ git cherry-pick -n abcdef
$ git diff --cached
Αυτό παίρνει το commit 'abcdef', το συγκρίνει με τον άμεσο πρόγονό του, και στη συνέχεια εφαρμόζει αυτή τη διαφορά πάνω στο '012345'. Αυτή η νέα διαφορά εμφανίζεται στη συνέχεια - η μόνη αλλαγή είναι ότι το πλαίσιο προέρχεται από το '012345' και όχι από τον άμεσο πρόγονο του 'abcdef'. Φυσικά, μπορεί να προκύψουν συγκρούσεις κτλ, οπότε δεν'είναι μια πολύ χρήσιμη διαδικασία στις περισσότερες περιπτώσεις.
Αν σας ενδιαφέρει μόνο το ίδιο το abcdef, μπορείτε να το κάνετε:
$ git log -u -1 abcdef
Αυτό συγκρίνει το abcdef με τον άμεσο πρόγονό του, μόνο του, και είναι συνήθως αυτό που θέλετε.
Και φυσικά
$ git diff 012345..abcdef
σας δίνει όλες τις διαφορές μεταξύ αυτών των δύο κοινοποιήσεων.
Θα βοηθούσε να έχουμε μια καλύτερη ιδέα για το τι προσπαθείτε να πετύχετε - όπως ανέφερα, το να ζητάτε τη διαφορά μεταξύ δύο commits χωρίς να ξέρετε τι βρίσκεται ενδιάμεσα δεν έχει νόημα.
Ας υποθέσουμε ότι θέλετε να δείτε τη διαφορά μεταξύ των commits 012345 και abcdef. Το παρακάτω θα πρέπει να κάνει αυτό που θέλετε:
<pre>, $ git checkout 012345 $ git cherry-pick -n abcdef $ git diff --cached </pre>,