You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

753 lines
16 KiB

  1. # Übung SCM
  2. ## 1. Staging Area
  3. ### 1. Ornder "UebungSCM" angelegt ("mkdir UebungSCM"), mit dem Befehl "git init" ein local repository in "UebungSCM" initialisiert
  4. ### 2. Datei "SCM.txt" ("touch SCM.txt") in dem Ordner erstellt und mit dem Befehl "nano" folgende Textzeilen hinzugefügt:
  5. > 1
  6. > 2
  7. > 3
  8. > hello
  9. > world
  10. > x
  11. ### 3. Status des Repository anzeigen lassen :
  12. > $ git status
  13. > On branch master
  14. >
  15. > No commits yet
  16. >
  17. > Untracked files:
  18. > (use "git add <file>..." to include in what will be committed)
  19. > SCM.txt
  20. >
  21. > nothing added to commit but untracked files present (use "git add" to track)
  22. ### 4. "SCM.txt" zur git Stage hinzufügen
  23. > $ git add "SCM.txt"
  24. >
  25. ### 5. aktuellen Status des Repository anzeigen
  26. > $ git status
  27. > On branch master
  28. > No commits yet
  29. >
  30. > Changes to be committed:
  31. > (use "git rm --cached <file>..." to unstage)
  32. > new file: SCM.txt
  33. ### 6. Änderungen in der Datei anzeigen
  34. > $ git diff
  35. >
  36. ### 7. einige weitere Zeilen in "SCM.txt einfügen
  37. > 1
  38. > 2
  39. > 3
  40. > hello
  41. > world
  42. > x
  43. > 5
  44. > 6
  45. > 7
  46. > 8
  47. > neun
  48. > zehn
  49. ### 8. aktuellen Status des Repository anzeigen
  50. > $ git status
  51. > On branch master
  52. >
  53. > No commits yet
  54. >
  55. > Changes to be committed:
  56. > (use "git rm --cached <file>..." to unstage)
  57. > new file: SCM.txt
  58. >
  59. > Changes not staged for commit:
  60. > (use "git add <file>..." to update what will be committed)
  61. > (use "git restore <file>..." to discard changes in working directory)
  62. > modified: SCM.txt
  63. >
  64. >
  65. ### 9. Änderungen in der Datei anzeigen
  66. > $ git diff
  67. > diff --git a/SCM.txt b/SCM.txt
  68. > index 8c721ef..87e597b 100644
  69. > --- a/SCM.txt
  70. > +++ b/SCM.txt
  71. > @@ -4,3 +4,9 @@
  72. > hello
  73. > world
  74. > x
  75. > +5
  76. > +6
  77. > +7
  78. > +8
  79. > +neun
  80. > +zehn
  81. >
  82. >
  83. ### 10. Einen commit erzeugen
  84. > $ git commit -m "SCM"
  85. > [master (root-commit) 888f529] SCM
  86. > 1 file changed, 6 insertions(+)
  87. > create mode 100644 SCM.txt
  88. >
  89. ### 11. Commit-ID identifizieren
  90. > [master (root-commit) 888f529] SCM
  91. > $ git show 888f529
  92. > commit 888f5299d207085f201038b048e4e1a99503585f
  93. ### 12. Zeigen sie die Änderung in der Datei an
  94. > $ git diff
  95. > diff --git a/SCM.txt b/SCM.txt
  96. > index 8c721ef..87e597b 100644
  97. > --- a/SCM.txt
  98. > +++ b/SCM.txt
  99. > @@ -4,3 +4,9 @@
  100. > hello
  101. > world
  102. > x
  103. > <span style="color:green">some *+5* text</span>
  104. > +6
  105. > +7
  106. > +8
  107. > +neun
  108. > +zehn
  109. >
  110. >
  111. ## Staging Area
  112. ### 1. Datei auf den Stand in der Stage zurücksetzen ("git reset --hard "commit_hash")
  113. > $ git reset --hard 888f5299d207085f201038b048e4e1a99503585f
  114. > HEAD is now at 888f529 SCM
  115. >
  116. ### 2. Aktueller Status des Repository
  117. > $ git status
  118. > On branch master
  119. > nothing to commit, working tree clean
  120. >
  121. ### 3. Änderungen in der Datei anzeigen
  122. > $ git diff
  123. >
  124. ### 4. Änderungen aus der Stage entfernen ohne die Datei zurückzusetzen
  125. > git checkout -- SCM.txt
  126. > Updated 0 paths from the Index
  127. >
  128. ### 5. Aktueller Status des Repository
  129. > $ git status
  130. > On branch master
  131. > nothing to commit, working tree clean
  132. >
  133. ### 6. Änderungen in der Datei anzeigen
  134. > $ git diff
  135. >
  136. ### 7. Datei auf den Stand im commit zurücksetzen
  137. #### Eingabe
  138. > $ git revert HEAD
  139. #### Ausgabe 1
  140. > Revert "SCM"
  141. >
  142. > This reverts commit 4bcb7c56d9dcf9e06223188c52c5d9b6f5a9030d.
  143. > Please enter the commit message for your changes. Lines starting
  144. > with '#' will be ignored, and an empty message aborts the commit.
  145. >
  146. > On branch master
  147. > Changes to be committed:
  148. > deleted: SCM.txt
  149. >
  150. ### Ausgabe 2
  151. > $ git revert HEAD
  152. > [master cb6d2d7] Revert "SCM"
  153. > 1 file changed, 4 deletions(-)
  154. > delete mode 100644 SCM.txt
  155. ### 8. Status des Repository
  156. > $ git status
  157. > On branch master
  158. > nothing to commit, working tree clean
  159. >
  160. ## Branching - Anlegen
  161. ### 1. Zeilen zur Datei "SCM.txt" hinzufügen (nano SCM.txt) und die Änderung comitten. Commit-Message : "main1"
  162. > $ git commit -m "master1"
  163. > [master 938ffec] master1
  164. > 1 file changed, 2 insertions(+)
  165. > create mode 100644 SCM.txt
  166. >
  167. ### 2. Schritt 1 Wiederholen. Commit-Message : "master2"
  168. > $ git commit -m "master2"
  169. > [master 91cb85a] master2
  170. > 1 file changed, 6 insertions(+), 2 deletions(-)
  171. >
  172. ### 3. Weitere Textdatei "testSCM.txt" anlegen, zur Stage hinzufügen und comitten
  173. > $ git commit -m "testSCM hinzugefuegt"
  174. > [master 09c235a] testSCM hinzugefuegt
  175. > 1 file changed, 0 insertions(+), 0 deletions(-)
  176. > create mode 100644 testSCM.txt
  177. >
  178. ### 4. Neuen Branch "test1" erzeugen
  179. > $ git branch "test1"
  180. >
  181. - und zu diesem wechseln
  182. > $ git checkout "test1"
  183. > Switched to branch 'test1 '
  184. >
  185. ### 5. Weiter Zeilen in die erste Datei "SCM.txt" einfügen und committen
  186. > $ git commit -m "test1Commit1"
  187. > [test1 2e0aea7] test1Commit1
  188. > 1 file changed, 4 insertions(+)
  189. >
  190. ### 6. Schritt 5 Wiederholen
  191. > $ git commit -m "test1Commit2"
  192. > [test1 539ef41] test1Commit2
  193. > 1 file changed, 4 insertions(+)
  194. >
  195. ### 7. Commit-ID merken
  196. > commit 539ef4193e4bf79a6e8d54d46f8506998192a2d8
  197. > test1 539ef41
  198. >
  199. ### 8. Weitere Zeilen in die zweite Datei "testSCM.txt" einfügen (nano "testSCM")
  200. ### 9. Änderungen zur git Stage hinzufügen (git add "testSCM.txt")
  201. ### 10. Aktueller Status des Repository
  202. > $ git status
  203. > On branch test1
  204. > Changes to be committed:
  205. > (use "git restore --staged <file>..." to unstage)
  206. > modified: testSCM.txt
  207. >
  208. ### 11. Weitere Zeilen zu "testSCM.txt" hinzufügen
  209. ## Branching - Zweige wechseln 1
  210. ### 1. Zum Branch "master" wechseln
  211. > git checkout "master"
  212. ### 2. Aktueller Status des Repository
  213. > $ git status
  214. > On branch master
  215. > Changes to be committed:
  216. > (use "git restore --staged <file>..." to unstage)
  217. > modified: testSCM.txt
  218. >
  219. #### alt:
  220. > $ git status
  221. > On branch master
  222. > nothing to commit, working tree clean
  223. >
  224. ### 3. Branch wechseln zu "test1"
  225. > $ git checkout "test1"
  226. >
  227. ### 4. Neuen Branch erzeugen "test2"
  228. > & git branch "test2"
  229. >
  230. ## Branching - Zweige Wechseln 2
  231. ### 1. Aktuellen Branch auf den Stand des Branches "master" zurücksetzen
  232. > $ git reset "2e0aea7"
  233. >
  234. ### 2. Status des Repository anzeigen
  235. #### Neuer Status
  236. > $ git status
  237. > On branch test1
  238. > Changes not staged for commit:
  239. > (use "git add <file>..." to update what will be committed)
  240. > (use "git restore <file>..." to discard changes in working directory)
  241. > modified: SCM.txt
  242. > modified: testSCM.txt
  243. >
  244. > no changes added to commit (use "git add" and/or "git commit -a")
  245. #### Alter Status
  246. > $ git status
  247. > On branch master
  248. > Changes to be committed:
  249. > (use "git restore --staged <file>..." to unstage)
  250. > modified: testSCM.txt
  251. ### 3. Neue Zeilen in der ersten Datei "SCM.txt" hinzufügen ohne commit
  252. ### 4. Auf den Branch "test2" wechseln
  253. > $ git checkout test2
  254. > error: Your local changes to the following files would be overwritten by checkout:
  255. > SCM.txt
  256. > Please commit your changes or stash them before you switch branches.
  257. > Aborting
  258. >
  259. ### 5. Warum schlägt das fehl?
  260. - Da die Änderungen an meiner Datei sonst überschrieben werden würden. Man muss zuerst die aktuelle Version der Datei
  261. committen oder zur Stash hinzufügen, sonst bricht Git den Versuch, den Branch zu wechseln ab.
  262. ### 6. Änderungen in die Stage übernehmen
  263. > $ git commit -m "master3"
  264. >
  265. ### 7. Branch lässt sich wechseln
  266. ### 8. Wechsel auf den Branch "test2"
  267. > git checkout "test2"
  268. >
  269. ### 9. Branch "test1" in "test3" umbenennen
  270. > $ git branch -m "test1" "test3"
  271. ## Historie - Anzeigen 1
  272. ### 1. Auf Branch "test3" wechseln
  273. > $ git checkout "test3"
  274. >
  275. ### 2. Historie anzeigen lassen
  276. > $ git log
  277. > commit f68024ec473989ad16ef5c3e60deca3e27da199f (HEAD -> test3, test2)
  278. > Author: HV <123>
  279. > Date: Sun Nov 19 17:16:37 2023 +0100
  280. >
  281. > test1Commit1
  282. >
  283. > commit 9380ec4ee992866ca2a06af022d665eed8918ab0
  284. > Author: HV <123>
  285. > Date: Sun Nov 19 17:16:15 2023 +0100
  286. >
  287. > test1Commit1
  288. >
  289. > commit 74660af0098e5ea03e23dc3b611deb26ef6022a4 (master)
  290. > Author: HV <123>
  291. > Date: Sun Nov 19 17:12:40 2023 +0100
  292. >
  293. > testSCM hinzugefuegt
  294. >
  295. > commit 93adc2aaf180b9e8d7f143d81e460d8692bb2aaa
  296. > Author: HV <123>
  297. > Date: Sun Nov 19 17:09:48 2023 +0100
  298. >
  299. > main2
  300. >
  301. ### 3. Informationen über den commit
  302. - Author, Uhrzeit, Datum, Commit-Message, Commit-Hash
  303. ### 4. Nur den aktuellen Commit anzeigen (-1)
  304. > $ git log -1
  305. > commit f68024ec473989ad16ef5c3e60deca3e27da199f (HEAD -> test3, test2)
  306. > Author: HV <123>
  307. > Date: Sun Nov 19 17:16:37 2023 +0100
  308. >
  309. > test1Commit1
  310. ### 5. Vereinfachte Historie
  311. > $ git log --oneline
  312. > f68024e (HEAD -> test3, test2) test1Commit1
  313. > 9380ec4 test1Commit1
  314. > 74660af (master) testSCM hinzugefuegt
  315. > 93adc2a main2
  316. > b93db03 main1
  317. > 979512c SCM
  318. >
  319. ### 6. Informationen über einen Commit
  320. - Commit-Message und ID werden ausgegeben
  321. ### 7. Anzahl der Branches
  322. - 3
  323. ### 8. Komplette vereinfachte Historie
  324. > $ git log --oneline --all
  325. > 7a29ba9 (test1) master3
  326. > f68024e (HEAD -> test3, test2) test1Commit1
  327. > 9380ec4 test1Commit1
  328. > 74660af (master) testSCM hinzugefuegt
  329. > 93adc2a main2
  330. > b93db03 main1
  331. > 979512c SCM
  332. >
  333. ### 9. Anzahl der Branches in der komplett vereinfachten Historie
  334. - 4
  335. ### 10. Wo befindet sich die Markierung HEAD
  336. - HEAD -> test3, test2
  337. ### 11. Auf Branch "test2" wechseln
  338. > $ git checkout "test2"
  339. > Switched to branch "test2"
  340. >
  341. ### 12. Vereinfachte Historie ohne (--all) anzeigen
  342. > $ git log --oneline
  343. > f68024e (HEAD -> test2, test3) test1Commit1
  344. > 9380ec4 test1Commit1
  345. > 74660af (master) testSCM hinzugefuegt
  346. > 93adc2a main2
  347. > b93db03 main1
  348. > 979512c SCM
  349. >
  350. ### 13. Mit Ergebnis von Schritt 7 vergleichen
  351. - gleich
  352. ## Historie Anzeigen 2
  353. ### 1. Wechseln auf Branch "test3"
  354. > $ git checkout "test3"
  355. > Switched to branch 'test3'
  356. >
  357. ### 2. Weitere Zeile in der ersten Datei hinzufügen und comitten
  358. > $ git commit -m "test3Commit1"
  359. > [test3 7074e81] test3Commit1
  360. > 1 file changed, 3 insertions(+)
  361. >
  362. ### 3. Schritt 2 drei Mal wiederholen
  363. > $ git commit -m "test3Commit2"
  364. > [test3 2440b20] test3Commit2
  365. > 1 file changed, 1 insertion(+)
  366. > $ git commit -m "test3Commit3"
  367. > [test3 2e428f4] test3Commit3
  368. > 1 file changed, 1 insertion(+)
  369. > $ git commit -m "test3Commit4"
  370. > [test3 1ae6afe] test3Commit4
  371. > 1 file changed, 1 insertion(+)
  372. ### 4. Vereinfachte Historie ohne (--all)
  373. > $ git log --oneline
  374. > 1ae6afe (HEAD -> test3) test3Commit4
  375. > 2e428f4 test3Commit3
  376. > 2440b20 test3Commit2
  377. > 7074e81 test3Commit1
  378. > f68024e (test2) test1Commit1
  379. > 9380ec4 test1Commit1
  380. > 74660af (master) testSCM hinzugefuegt
  381. > 93adc2a main2
  382. > b93db03 main1
  383. > 979512c SCM
  384. >
  385. ### 5. Ergebnis mit Schritt 5 vergleichen
  386. - HEAD ist jetzt nur auf "test3" und die neuen commits, wurden in der Historie ergänzt
  387. ### 6. Komplette verinfachte Historie anzeigen mit (--all)
  388. > $ git log --oneline --all
  389. > 1ae6afe (HEAD -> test3) test3Commit4
  390. > 2e428f4 test3Commit3
  391. > 2440b20 test3Commit2
  392. > 7074e81 test3Commit1
  393. > 7a29ba9 (test1) master3
  394. > f68024e (test2) test1Commit1
  395. > 9380ec4 test1Commit1
  396. > 74660af (master) testSCM hinzugefuegt
  397. > 93adc2a main2
  398. > b93db03 main1
  399. > 979512c SCM
  400. >
  401. ### 7. Mit Schrit 8 vergleichen
  402. - HEAD ist jetzt auf "test3", die letzten drei commits wurden ergänzt
  403. ## Merging
  404. ### 1. Eine Markierung setzen
  405. > $ git tag "tag-test3"
  406. ### 2. Branch wechseln auf test2
  407. > $ git checkout "test2"
  408. ### 3. Eine Markierung setzen
  409. > $ git tag "tag-test2"
  410. ### 4. "test3" in "test2" mergen
  411. > $ git merge test3
  412. > Auto-merging SCM.txt
  413. > CONFLICT (content): Merge conflict in SCM.txt
  414. > Automatic merge failed; fix conflicts and then commit the result.
  415. ### 5. Ergebnis in der Datei anzeigen
  416. > '...
  417. > ...
  418. > ...
  419. > <<<<<<< HEAD
  420. > =======
  421. > ...
  422. > ... '
  423. ### 6. Historie des Repository anzeigen
  424. > $ git log --oneline
  425. > 1bd5765 (HEAD -> test2, tag: tag-test2) test1_2
  426. > 84ff691 test1_1
  427. > 598ccc0 Revert "master3"
  428. > 9706980 master3
  429. > ef10ce0 (master) master3 neue txt-Datei
  430. > 1c67e50 master2
  431. > 83e9caf master1
  432. > cb6d2d7 Revert "SCM"
  433. > 4bcb7c5 SCM
  434. ### 7. Branch test2 auf Markierung tag-test2 zurücksetzen
  435. > $ git reset --hard "f68024e"
  436. > HEAD is now at f68024e test1Commit1
  437. ### 8. Auf branch "test3" wechseln
  438. > $ git checkout "test3"
  439. ### 9. "test2" in "test3" mergen
  440. > $ git merge test2
  441. > Auto-merging SCM.txt
  442. > CONFLICT (content): Merge conflict in SCM.txt
  443. > Automatic merge failed; fix conflicts and then commit the result.
  444. ### 10. Repository anzeigen und mit Schritt 3 vergleichen
  445. > $ git log --oneline
  446. > e257d98 (HEAD -> test3) test3_1
  447. > 6675e4e (tag: tag-test3) test1_3
  448. > ef10ce0 (master) master3 neue txt-Datei
  449. > 1c67e50 master2
  450. > 83e9caf master1
  451. > cb6d2d7 Revert "SCM"
  452. > 4bcb7c5 SCM
  453. ### 11. Vergleichen ( Die Zeile "=======" wird nicht mehr angezeigt)
  454. > ...
  455. > ...
  456. > ...
  457. > <<<<<<< HEAD
  458. > ...
  459. > ...
  460. ## Merging - Konfliktauflösung und Vorbereitung
  461. ### 1. Branch "test3" auf die Markierung "tag-test3" zurücksetzen
  462. > $ git reset --hard "tag-test3"
  463. > HEAD is now at 6675e4e test1_3
  464. ### 2. Name des Branches an das Ende der zweiten Zeile der ersten Datei hinzufügen und committen
  465. > $ git commit -m "Name vom Branch am Ende der zweiten Zeile"
  466. > [test3 c4141f4] Name vom Branch am Ende der zweiten Zeile
  467. > 1 file changed, 1 insertion(+), 1 deletion(-)
  468. ### 3. Für die nächsten 3 Zeilen wiederholen
  469. > $ git commit -m "Name vom Branch am Ende der dritten Zeile"
  470. > $ git commit -m "Name vom Branch am Ende der vierten Zeile"
  471. > $ git commit -m "Name vom Branch am Ende der fuenften Zeile"
  472. ### 4. Markierung setzen
  473. > $ git tag "tag-test3-conflict"
  474. ### 5. Auf Branch "test2" wechseln
  475. > $ git checkout "test2"
  476. ### 6. Namen des Branches am Ende in die sechste Zeile schreiben und committen
  477. > $ git commit -m "Name vom Branch am Ende der sechsten Zeile"
  478. ### 7. Für die nächsten 3 Zeilen wiederholen
  479. > $ git commit -m "Name vom Branch am Ende der siebten Zeile"
  480. > $ git commit -m "Name vom Branch am Ende der achten Zeile"
  481. > $ git commit -m "Name vom Branch am Ende der neunten Zeile"
  482. ### 8. Markierung setzen
  483. > & git tag "tag-test2-conflict"
  484. ## Merging Konfliktauflösung
  485. ### 1. Merge von test3 aus starten
  486. > $ git checkout "test3"
  487. > Switched to branch 'test3'
  488. > $ git merge "test2"
  489. ### 2. Ausgabe (Merge Conflict)
  490. > $ git merge test2
  491. > Auto-merging SCM.txt
  492. > CONFLICT (content): Merge conflict in SCM.txt
  493. > Automatic merge failed; fix conflicts and then commit the result.
  494. ### 3. Aktueller Status des Repository
  495. > $ git status
  496. > On branch test3
  497. > You have unmerged paths.
  498. > (fix conflicts and run "git commit")
  499. > (use "git merge --abort" to abort the merge)
  500. >
  501. > Unmerged paths:
  502. > (use "git add <file>..." to mark resolution)
  503. > both modified: SCM.txt
  504. >
  505. > no changes added to commit (use "git add" and/or "git commit -a")
  506. ### 4. Zu entnehmende Infos
  507. - Branches sind nicht gemerged und haben Konflikte
  508. ### 5. Merge abbrechen
  509. > $ git merge --abort
  510. ### 9. Welche Änderungen stammen aus welchem Branch?
  511. - Zeilen mit "test3" stammen aus dem Branch "test3"
  512. ## Merging - Konfliktauflösung 2
  513. ### 1. Merge von Branch test2 aus starten
  514. > $ git checkout "test2"
  515. > Switched to branch 'test2'
  516. > $ git merge test3
  517. > Auto-merging SCM.txt
  518. > CONFLICT (content): Merge conflict in SCM.txt
  519. > Automatic merge failed; fix conflicts and then commit the result.
  520. ### 2. Inhalt der Datei betrachten
  521. ### 3 / 4 / 5 / 6
  522. ### 7. Änderungen committen
  523. > $ git commit -m "Zeilen kopiert, Konfliktbereich"
  524. > [test2 7c42bfa] Zeilen kopiert, Konfliktbereich
  525. ### 8. Aktuellen Status des Repository anzeigen
  526. > $ git status
  527. > On branch test2
  528. > nothing to commit, working tree clean
  529. ### 9. Historie anzeigen
  530. > $ git log --oneline
  531. ### 10. test3 auf die Markierung tag-test3 zurücksetzen
  532. > git reset --hard tag-test3