Hotfixing
Ein paar Tage nach dem Deployment bekommen wir die Meldung vom Kunden, dass der Standardwert "Human" zu speziezistisch sei, und sofort entfernt werden müsse. Von einem Deployment zusammen mit den noch zu testenden Weiterentwicklungen lässt er sich nicht überzeugen. Wir müssen also einen Hotfix erstellen.
Dafür gehen wir von dem zu ändernden Stand aus. Wir branchen also nicht von master, sondern von production aus.
$ git checkout production[...]$ git checkout -b hotfix/remove-default-name[...]
Da sehr granular gearbeitet wurde, ist die störende Änderung der einzige Inhalt eines Commits. Den SHA-1 ermitteln wir via git log.
$ git logcommit d36c885d4e0f35c3572e5619151db00009df2538 (HEAD -> hotfix/remove-default-name, tag: prd/2019-11-29-2-default-greeting, origin/production, production)Merge: a0b2b75 e25fd1cAuthor: Some One <some.one@proclane.com>Date: Mon Dec 9 15:13:57 2019 +0100Merge branch 'master' into productioncommit e25fd1c54dee0aaeb0403939f32d789e3946225d (savepoint)Merge: 870ed70 b368e0aAuthor: Some One <some.one@proclane.com>Date: Mon Dec 9 15:13:22 2019 +0100Merge branch 'feature/default-name'commit b368e0a8c68b36c893635611cdbb6cd87e8cf12d (feature/default-name)Author: Some One <some.one@proclane.com>Date: Mon Dec 9 14:59:24 2019 +0100Add fallback value for greeting[...]
Um diese Änderung rückgängig zu machen hilft wieder Git.
$ git revert b368e0[hotfix/remove-default-name 9d77230] Revert "Add fallback value for greeting"1 file changed, 3 deletions(-)
Der Befehl mündet in einem Commit-Message-Editor mit einer vordefinierten Message, die wir akzeptieren.
Nun wurde ein neuer Commit erstellt, und Main.java sieht so aus wie der Kunde es gerne hätte:
$ cat Main.javaimport java.util.Scanner;public class Main {private static String askName() {System.out.println("Hey, what's your name?");System.out.print("> ");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();scanner.close();return name;}public static void main(String[] args) {String name = askName();System.out.println(String.format("Hello, %s!", name));}}
Dieser Fix kann nun erst einmal deployed werden:
$ git checkout production[...]$ git pull[...]$ git merge --no-ff hotfix/remove-default-name[...]$ git tag -a prd/2019-11-30-remove-default-greeting[...]$ git push[...]$ git push --tags
Diese Änderung muss nun natürlich auch noch in unsere master-Branch eingepflegt werden.
$ git checkout master[...]$ git pull[...]$ git merge --no-ff hotfix/remove-default-name[...]$ git push[...]