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.

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