Sie sind auf Seite 1von 14

Inhaltsverzeichnis

1 Terminologie

2

2 Getting dirty

3

2.1 Alias fur¨

git Befehle

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

2.2 Datein erganzen¨

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

3 Branches

7

3.1 neuen Branch erstellen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

3.2 Branch-Merge-Methoden .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

3.2.1 straight .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

3.2.2 Squashing

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

3.2.3 Cherry-Picking

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

3.3 Konflikte und wie man damit umgeht

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

3.4 Branches umbenennen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9

4 Historie in Git

10

4.1 Reichweite der Revisionen festlegen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

10

4.2 Unterschiede zwischen commits betrachten

 

10

4.2.1 Generelles

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

10

4.2.2 Amending Commits

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

4.2.3 Commits ruckg¨

angig¨

machen .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

4.3 Arbeiten mit Remote Repositories

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

4.3.1 Ne Kopie ziehen

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

4.3.2 Auf den neuesten Stand bleiben

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

5 Nutzliches¨

13

5.1

Typische Kommandos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

5.1.1 Benutzernamen und E-Mail setzen

5.1.2 Alle blops im Repository anzeigen

.

.

5.1.3 Komplette Diffs anzeigen lassen

5.1.4 Die letzten n commits sehen .

5.1.5 Ausfuhrliche¨

5.1.6 Hard Reset

5.1.7 Letzten commit uberarbeiten¨

5.1.8 Soft Reset

5.1.9 Dateiumbennen .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. . .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

13

13

13

Nachrichten uber¨ .

die commits zu erhalten . . . .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

13

13

14

14

1 Terminologie

Repository : ist eine Sammlung von commits u. daraus entsteht dann ein working tree; es definiert einen HEAD, der den branch od. commit des aktuellen working tree darstellt

index : ubertr¨ agt¨ nicht gleich in den workin tree, stattdessen werden erst in sogenannten index registriert, d.h. es werden die erst nach einander alle bestatigt,¨ bevor sie commited werden

working tree : ist jedes beliebiges Verzeichnis auf deiner Platte, welches ein Repository hat; es beinhaltet alle Datein u. Unterordner

commit : ist ein Schnappschuss des working trees zu einen bestimmten Zeitpunkt; der Zustand des HEADs zur Zeit des commits wird der Elternteil des commits deswegen der Name “revisions history”

tag : ist alias fur¨

ein commit od. fur¨

ein Branch

master : ist die Hauptlinie der Entwicklung

HEAD : der gerade ausgecheckte commit wird immer HEAD genannt

2 Getting dirty

erstellen eines Repository

mkdir

cd

git

mysite

mysite

init

nun erstellen wir eine Datei mit den Namen index.html u. den folgenden Inhalt:

<html>

<body>

<h1>Hello

World!</h1>

</body>

</html>

Datei zum Index erganzen¨

git

add

index.html

wird die Datei zum Repository erganzt¨ gestagged)

commiten mit Nachricht

(wird im index jedoch vor dem commit erst

git

commit

-m

"add

bla"

[master

1

create

files

(root-commit)

934a4d5]

add

changed,

mode

5

100644

insertions(+),

index.html

bla

0

deletions(-)

nach jeden commit wird der Name u. die E-Mail abgespeichert

mittels git log kann man sich angucken:

helex@mg:~/mysite$

git

log

commit

934a4d59f8850bb39ca8d98a5b5b36590b09d7d0

Author:

Matthias

 

G¨unther

<m6guma2@uni-jena.de>

Date:

Tue

May

4

09:09:59

2010

+0200

add

bla

die Commit zahl ist ein SHA-1 1

1 wurde von der NSA entwickelt u. steht fur¨ Hash-Kollisionen kommen kann

Secure Hash Algorithm ist jedoch veraltet, da es doch zu

nun index.html :

<html>

<head>

<meta

http-equiv="Content-type"

content="text/html;

charset=utf-8"

/>

<title>Hello

Helex

in

</head>>

<body>

<h1>Hello,

</body>

</html>

Helex!</h1>

git</title>

u. Status mittels git status anzeigen:

#

On

branch

master

 

#

Changed

but

not

updated:

 

#

(use

"git

add

<file>

"

to

update

what

will

be

committed)

 

#

(use

"git

checkout

--

<file>

"

to

discard

changes

in

working

directory)

#

#

modified:

index.html

 

#

no

changes

added

to

commit

(use

"git

add"

and/or

"git

commit

-a")

nun n noch mitteilen u. das macht man genauso wie beim erganzen¨ zu einem Repository:

einer Datei

git

add

index.html

 

>

git

status

 

#

On

branch

master

 

#

Changes

to

be

committed:

#

(use

"git

reset

HEAD

<file>

"

to

unstage)

#

#

modified:

index.html

 

>

git

commit

-m

"add

head"

Branch vom master (also trunk in svn-Sprache)

 

git

branch

RB_1.0

master

 

in Branch wechseln

 

git

checkout

RB_1.0

 

>

Switched

to

branch

’RB_1.0’

 
 

4

Releaseumgang

mit tags gehts leichter, da man sich dieser besser als eventuelle schlechte Branchna- men merken kann:

git

tag

1.0

RB_1.0

Liste aller Tags in einem Repository ausgeben:

git

tag

nun hat man verschiedene Branches u. uber¨

¨

manche Anderungen weiß der jeweils

andere Branch nicht bescheid mergen wird mittels git rebase gemacht

man wechselt zu erst in den master branch

git

>

checkout

to

Switched

master

branch

’master’

nun kann man den folgenden Befehl machen:

git

rebase

RB_1.0

master zeigt nun auf die commits von dem branch RB 1.0

man kann einen Branch mit den folgenden Befehl loschen:¨

git

branch

-d

RB_1.0

Zip ausm Projekt erstellen:

git

archive

--format=tar

\

--prefix=mysite-1.0/

|

gzip

>

\

mysite-1.0.tar.gz

1.0

Kopie ziehen

wird mit git clone gemacht:

git

clone

git://github.com/tswicegood/mysite.git

mysite-remote

2.1

Alias fur¨ git Befehle

erstellt man sich wie folgt:

git

config

--global

alias.ci

"commit"

u. schon kann man git ci statt git commit eingeben

2.2 Datein erg¨anzen

Datein u. gib git add -i eingeben:

staged

unstaged

path

1:

unchanged

+1/-0

index.html

 

***

Commands

***

1:

[s]tatus

2:

[u]pdate

3:

[r]evert

4:

[a]dd

untracked

5:

[p]atch

6:

[d]iff

7:

[q]uit

8:

[h]elp

 

What

now>

3 Branches

3.1 neuen Branch erstellen

Branch-Erstellung

git

branch

new

git branch zeigt alle Branches an

in Branch wechseln via git checkout branchname

manchmal will man jedoch bei Brancherstellung aus einer bestehenden Version bereits ausschecken Option -b verwenden

git

checkout

-b

alternate

master

3.2 Branch-Merge-Methoden

1.

straight: history von beiden Branches nehmen u. mergen

2.

3.

squashed: history von einem Branch nehmen u. komprimiere (squash) diese als commit in den anderen Branch

cherry-picking: ein commit zieht sich einen einzelnen commit von einen verschie- denen Branch u. wendet es auf den aktuellen Branch an

3.2.1 straight

angenommen wir sind im alternate Branch:

git

add

about.html

git

commit

-m

"bla"

nun geht man in den master Brunch u. mergt diesen dann mit alternate Brunch

git

git

Updating

Fast

checkout

merge

master

alternate

9a23464

d0d568c

forward

about.html

|

1

+

1

files

changed,

1

insertions(+),

0

deletions(-)

create

mode

100644

about.html

per default wird also straight gemergt

3.2.2

Squashing

falls man in einem Branch echt nur eine gemacht hat, dann dieses Verfahren verwenden. Ansonsten will vermeiden u. lieber straight machen

als Beispiel

 

git

checkout

-b

contact

master

 

git

add

contact.html

 

#

bearbeite

contact.html

 

git

commit

-m

"bla"

 

nun wechselt in den master Branch wechseln u. squash-merge machen:

git

checkout

master

 

git

merge

--squash

contact

 

Updating

d0d568c

a5aca69

Fast

forward

 

Squash

commit

--

not

updating

HEAD

 

contact.html

|

12

++++++++++++

 

1

files

changed,

12

insertions(+),

0

deletions(-)

create

mode

100644

contact.html

 

3.2.3

Cherry-Picking

 

manchmal will man nur einen einzigen commit zwischen Branches commiten ohne

vollstandigen¨

merge durchzufuhren:¨

git

checkout

contact

 

//

contact.html

aendern

 

git

commit

-m

"bla3"

-a

//

nun

nimmt

man

die

Commit

Nummer,

da

dies

Cherry

braucht

git

checkout

master

 

git

cherry-pick

50df049

 

Finished

one

cherry-pick.

[master

bc377b8]

ss

1

files

changed,

1

insertions(+),

0

deletions(-)

3.3 Konflikte und wie man damit umgeht

passiert, wenn an der gleichen Datei ausgefuhrt¨

werden, ohne das

git

checkout

-b

about

master

 

//

datei

hallo.html

anlegen

git

commit

-m

"aa"

-a

//

da

spart

man

sich

das

add

//

zweiten

Branch

erstellen

 

git

branch

about2

about

//

nun

hallo.html

bearbeiten,

welche

in

about

ist,

bevor

man

in

about2

wechselt

git

checkout

about2

 

//

nun

hallo.html

aendern

 

git

commit

-m

"bb"

-a

//

haben

einen

Konflikt

generiert

git

checkout

about

git

merge

about2

CONFLICT

(content):

Merge

conflict

in

hallo.html

 

Automatic

merge

failed;

fix

conflicts

and

then

commit

the

result.

 

guckt man sich die Datei an, so erhalt¨

man folgendes:

deutsch

<<<<<<<

HEAD:hallo.html

englisch

=======

franz

>>>>>>>

about2:hallo.html

alles, was unter ======= steht ist der Code, der vom andere Branch kommt u. <<<<<<< ist der Code, der vom aktuellen Branch kommt

nun kann man git mergetool zur Konflikauflosung¨

verwenden (mogliche¨

werden angezeigt z.B. diffuse) od. aber einfach selbst Hand anlegen

Tools

wenn man fertig ist git commit machen, dann sieht die Welt wieder besser aus

3.4 Branches umbenennen

git

branch

-m

oldbranchname

newbranchname

9

4 Historie in Git

generell mit git log

4.1 Reichweite der Revisionen festlegen

mittels Zeitangabe: logs der letzten 5 Stunden anzeigen

git

log

--since"5

hours"

alle Logs anzeigen, außer die der letzten 5 Stunden

git

log

--before="5

hours"

mittels ranges

git

log

18ff22e

12kkui

mit Ranges kann man sich die Ausgabe auch formatieren lassen

git

log

--pretty=format:"%h

%s"

1.0

HEAD

4.2 Unterschiede zwischen commits betrachten

4.2.1 Generelles

mittels diff 2

git

diff

1c40f36

 

diff

--git

a/hallo.html

b/hallo.html

index

bf777b7

e69de29

100644

---

a/hallo.html

 

+++

b/hallo.html

@@

-1

+0,0

@@

-deutsch

¨

ist anhlich¨

angezeigt werden

wie git log nur dass hier alle gemachten Anderungen an der Datei

Statistiken (also anzahl der + u. ) zu den Datein anzeigen lassen

2 gitk liefert eine ubersichtliche¨

Darstellung, bei der man sich nicht alle Konsolenbefehle merken muss

 

git

diff

--stat

#

es

wird

immer

der

Branch

genommen,

in

den

man

 

#

sich

gerade

befinden

 
 

about.html

|

1

+

bla.html

|

1

+

contact.html

|

2

++

hello.html

|

13

+++++++++++++

 

index.html

|

9

---------

 

5

files

changed,

17

insertions(+),

9

deletions(-)

 

herausfinden, von wem welche Zeile zuletzt wurde mit blame

git

blame

contact.html

 

adb1b7b2

(Matthias

G¨unther

2010-05-04

13:08:16

+0200

1)

aa

bc377b8f

(Matthias

G¨unther

2010-05-04

13:09:38

+0200

2)

bb

4.2.2

Amending Commits

 

angenommen, man hat etwas hochgeladen u. kurz nach dem Commit fallt¨ einen

ein, was man noch vergessen hat, dann kann man den amend Befehl benutzen, um

 

¨

 

die Anderung durchzufuhren:¨

 

#

mache

eine

Aenderung

an

einer

Datei

 

git

commit

-m

"another

change"

-a

#

nun

wieder

eine

Kleinigkeit

aendern

 

git

commit

-C

HEAD

-a

--amend

 

die Option -C sagt git, dass es die spezifizierte Commit Nachricht (hier HEAD) nehmen soll

4.2.3

Commits ruckg¨

¨angig machen

 

mittels revert

 

git

revert

-n

HEAD

 

#

statt

den

HEAD

kann

man

auch

die

Revisionssnummer

angeben

 

git

revert

1b6d

 

4.3 Arbeiten mit Remote Repositories

4.3.1 Ne Kopie ziehen

git

clone

git://

4.3.2 Auf den neuesten Stand bleiben

kommt ofters¨

mal vor :), dass es eine neuere Version gibt u. die zieht man sich via

fetch

wenn man git fetch aufruft, dann werden die remote branches upgedated ahnlich¨ wie git push

will man die remote branches mit den lokalen Branches mergen dann git pull <repository> <refspec> verwenden

z.B. zieht sich Joe via clone eine Kopie (name der Kopie ist bla) von Alice

Projekt, andert¨

was u. commitet

Alice zieht sich dann die n in das home-Verzeichnis:

git

pull

/home/Joe/bla

master

danach wird alles gemergt u. es geht wieder

vor dem mergen kann sich Alice aber auch angucken, ob sich ein pull lohnt via fetch:

git

fetch

/home/Joe/bla

master

git

log

-p

HEAD

FETCH_HEAD

wie haben mit git clone uns etwas gezogen u. wollen nun die aktuellste Version haben, dann reicht git pull aus!

¨

Anderungen pushen

git

push

git

pull

<repository>

<refspec>

5 Nutzliches¨

mit git gc wird aufgeraumt,¨

d.h. alle Datein, auf denen nichts mehr zeigt (denke

an den DAG), was passieren kann, wenn man verschiedene Branches mergt

git reflog zeigt alle commits des Repository an

will man auf ein commit zugreifen (z.B. beim revert), dann reicht es, wenn man die

ersten 4 Buchstaben des Hashs angibt

5.1 Typische Kommandos

5.1.1 Benutzernamen und E-Mail setzen

git

config

--global

user.name

"Your

Name"

git

config

--global

user.email

"you@example.com"

5.1.2 Alle blops im Repository anzeigen

git

ls-tree

HEAD

5.1.3 Komplette Diffs anzeigen lassen

git

log

-p

5.1.4 Die letzten n commits sehen

git

log

-n3

5.1.5 Ausfuhrliche¨

git

Nachrichten uber¨

log

--stat

--summary

die commits zu erhalten

es werden also alle + u. - angezeigt

5.1.6 Hard Reset

wenn man noch nicht commited hat, man die gemachten verwerfen mochte:¨

git

reset

--hard

5.1.7 Letzten commit uberarbeiten¨

git

commit

--amend

5.1.8

Soft Reset

git

reset

--soft

HEAD^

fuge¨

nun die hinzu, z.B.:

git

add

forgot.txt

these.txt

uberschreibe¨

die letzte commit-Nachricht:

git

commit

5.1.9 Dateiumbennen

git

mv

alt.txt

neu.txt

5.1.10 remote branches angucken git branch -r