Home » 2022 » Juni

Archiv für den Monat: Juni 2022

Git Verstehen 2

GIT Areas

Git besteht aus den 4 Areas:

  • Git Repo (.git Verzeichnis)
  • Index (=Staging Area)
  • Working Area (WA) (Das durch Git überwachte lokale File Subsystem)
  • Stash

Was Checkout macht

git checkout mybranch

  1. Setzt den HEAD auf den genannten Branch
  2. Kopiert den Objekt-Tree, der durch den dortigen Commit referenziert wird in die Working Area.

Was macht Reset

git reset –hard HEAD

  1. Setzt den derzeitigen Branch auf den genannten Branch/Commit (hier HEAD)
    (HEAD ist der Spezialfall: Da wird kein Branch(-Pointer) verschoben, das ja „derzeitiger Branch“ die Bedeutung von HEAD ist :-))
  2. Kopiert den Objektbaum unter dem geanannten Branch/Commit in den Index (Option: –mixed) und die WA (–hard). Bei –soft wird nicht kopiert.

Git reset –hard branchX
Copies the new HEAD from the repo to the index and WA

git reset –mixed branchX
//(Default) … to the index only (not WA)

git reset –soft branchX
Only repo affected (No overwriting of WA or index)

Spezialfall:

git reset –hard origin/branchA

Dies setzt den derzeitigen Branch auf den Branch „branchA“ des „Master“-Repos (=origin).
Das macht dann Sinn, wenn man die lokalen Änderungen (sowohl in der WA (weil –hard) als auch im Index und dem lokalen Repository auf den Stand des Remote-Branches stellen möchte. Dazu muss zuerst sinnvollerweise ein git fetch origin gemacht werden. Das ganze macht nur Sinn, wenn wir lokal auf demselben Branch „branchA“ sind, sonst gibt’s Chaos!

Git Rename

git rm file
Remove file from index and WA //interaktiv warning
git rm –cached file
Only delete from index

git mv filea fileb
Renames a file in the WA and the index
//Same effect as renaming it in the WA and then adding it to the index. (Git detects the renaming character like this too.)


Unstage

Ganzen Index zurücksetzen:
git reset –mixed HEAD
//Alles in Index (nicht WA, da nicht –hard) wird mit dem Current Branch (HEAD) über schrieben.

Einzelnes File im Index zurücksetzen:
git reset HEAD fileA
// 1. Current Branch wird auf HEAD gesetzt (ist er ja sowieso :-))
// 2. Kopiert HEAD in den index (default von reset ist –mixed)

Zurücksetzen von File in WA:
Git reset –hard HEAD file //Funktioniert nicht „Cannot do hard reset with paths“
Stattdessen:
git checkout HEAD file  
Achtung: Git checkout mit Pfad kann überschreibt (File in) WA! Mit Pfad ist Checkout ein gefährliches Kommando! Checkout ohne Pfad überschreibt nie.

Stash

git stash –include-untracked
//not default!!
//1. saves away differenced between WA or Index and Repo
//2. checks out the current commit. –> WA=Index=HEAD of Repo

git stash list

git stash apply 
//default: applies most recent stash
//Bringt Differences zu WA und zu Index zurück.

git stash clear

Git Merge Conflicts:

Git Merge wird bemacht mit:
git merge otherBranch intoBranch

Bei Merge-Konflikten
  • … bleibt git im Merge-Modus. Dies ist an den MERGE* filte im .git directory zu erkennen
  • Merge kann abgebrochen werden mit git merge –abort

Merge Konflikte lösen mit:

  1. Bereinigen der merkierten Stellen „>>>>“ „<<<<„
  2. Git add file
  3. Git commit

Teileweise Prozessieren von Files

git add –patch fileA
// Will open interactive view to select which changes actually to stage and which not

–patch gibt’s sinngemäss auch für checkout, stash, reset,

Newer Commands

Git switch und restore sind Commando-Subsets von checkout.

git checkout: Move Head to a branch/commit && copy HEAD Tree to WA

git switch: Move Head to a branch/commit

git restore: copy HEAD Tree to WA

Git – Cheat Sheet / Git – Wichtigste Kommandos

https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet