ubuntuusers.de

git + fetch + aktualisieren auf Tag (merge)

Status: Gelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

frank-w

Anmeldungsdatum:
30. September 2008

Beiträge: 419

Hallo,

ich versuche mich gerade im Kernel-bauen und ändere da so einiges im stable (bei mir lokal).

nun möchte ich gerne das git-repo aktualisieren, ohne dasss meine Änderungen verloren gehen.

aktuell ist mein Repo auf 4.14.2 (inkl. meiner Änderungen, welche nicht commited sind) und wenn ich git fetch aufrufe, zeigt es mir tag 4.14.4. Nun möchte ich auf 4.14.4 gehen, aber meine Änderungen nicht neu machen müssen. grob würde ich ein Merge vermuten, aber die richtigen optionen habe ich bisher nicht herausgefunden...

ist vorher ein commit nötig/sinnvoll (wäre ja nur für mich aktuell)?

wie könnte ich auf das neue Tag aktualisieren, ohne meine Änderungen zu verlieren?

Gruß Frank

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

frank-w schrieb:

aktuell ist mein Repo auf 4.14.2 (inkl. meiner Änderungen, welche nicht commited sind)

Fuer uncommited changes: Mit git stash kannst du deine Aenderungen bei Seite legen, dann wechselst du zu dem gewuenschten Ziel und dann machst du git stash apply um deine Aenderungen wieder anzuwenden. Konflikte koennen dabei natuerlich auftreten.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Hallo,

da gibt es mehrere Möglichkeiten - normalerweise erstellt man einen eigenen Branch für die Änderungen, fügt die gewünschten Dateien hinzu und macht dann einen Commit (oder man gliedert das in mehrere Commits auf, wenn man bestimmte Änderungen besser nachvollziehbar machen will):

git checkout -b mybranch
git add file1 file2 [...]
git commit -m "custom changes" 

Danach kann man sich den gewünschten Stand für den Tag holen (im folgenden Beispiel wird der als extra Branch kernel_4.14.4 abgelegt) und ihn dann mit deinem Branch mergen:

git fetch --tags --prune
git checkout tags/4.14.4 -b kernel_4.14.4
git merge kernel_4.14.4 

Dabei musst du dann ggf. noch Merge-Konflikte auflösen.

Alternativ könntest du mit git stash die Änderungen vorübergehend entfernen, den gewünschten Stand auscheckend und sie mit git stash apply wieder anwenden.

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

frank-w schrieb:

wie könnte ich auf das neue Tag aktualisieren, ohne meine Änderungen zu verlieren?

Schau dir mal git rebase an.

frank-w

(Themenstarter)

Anmeldungsdatum:
30. September 2008

Beiträge: 419

hallo

erstmal danke für die vielen Antworten...aktuell ist wohl "git stash" der einfachste Weg, da er ohne commit auskommt

Änderungen zur Seite legen:

1
2
3
frank@Frank-Laptop:/media/data_ext/kernel_4.14/linux-stable$ git stash
Saved working directory and index state WIP on master: f9f0b03 Linux 4.14.2
HEAD is now at f9f0b03 Linux 4.14.2

neues Tag auschecken

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
frank@Frank-Laptop:/media/data_ext/kernel_4.14/linux-stable$ git checkout tags/v4.14.4
Note: checking out 'tags/v4.14.4'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 51a2a68... Linux 4.14.4

Änderungen wieder einspielen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
frank@Frank-Laptop:/media/data_ext/kernel_4.14/linux-stable$ git stash apply
HEAD detached at v4.14.4
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:   arch/arm/boot/dts/mt7623.dtsi
	modified:   arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dts
	modified:   drivers/mmc/host/mtk-sd.c
	modified:   drivers/net/wireless/mediatek/Kconfig
	modified:   drivers/net/wireless/mediatek/Makefile

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	arch/arm/boot/zImage-dtb
	arch/arm/configs/mt7623n_evb_fwu_defconfig
	build.sh
	drivers/net/wireless/mediatek/mt76/
	uImage

no changes added to commit (use "git add" and/or "git commit -a")

muss ich jetzt noch ein Merge durchführen (wenn ja wie) bzw. wurden die geänderten Dateien einfach "übersprungen"? beim kurzen durchschauen mit "git diff" scheinen die Dateien "meinen" Stand zu haben. Ich weis aber nicht, ob sich diese im Main-Repo geändert haben...

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Git hätte dich darauf hingewiesen, wenn ein händisches Eingreifen erforderlich gewesen wäre, in dem Fall scheint das Anwenden des Stash ohne Probleme geklappt zu haben.

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

frank-w schrieb:

muss ich jetzt noch ein Merge durchführen (wenn ja wie) bzw. wurden die geänderten Dateien einfach "übersprungen"?

Weder noch. Mit git stash apply führt du deine Änderungen automatisch wieder aus. Sofern dort keine Konflikte aufgetreten sind, konnten die Änderungen erfolgreich angewendet werden.

frank-w

(Themenstarter)

Anmeldungsdatum:
30. September 2008

Beiträge: 419

Achso, wenn im remote-repo Änderungen waren,die mit meinen kollidieren, würde git stash apply rummeckern

danke euch...

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

frank-w schrieb:

Achso, wenn im remote-repo Änderungen waren,die mit meinen kollidieren, würde git stash apply rummeckern

Genau, da steht dann - wie auch bei einem merge mit Konflikten - klar erischtlich da, welche Dateien einen Merge brauchen.

Antworten |