150 lines
2.8 KiB
Markdown
150 lines
2.8 KiB
Markdown
---
|
|
gitea: none
|
|
include_toc: true
|
|
---
|
|
# Git
|
|
|
|
## delete branch
|
|
|
|
Lokal Branch löschen z.B. wenn er auf Origin in master gemergt wurde.
|
|
|
|
```
|
|
// delete branch locally
|
|
git branch -d localBranchName
|
|
|
|
// delete branch remotely
|
|
git push origin --delete remoteBranchName
|
|
```
|
|
|
|
## master updaten auf Stand von origin/master
|
|
|
|
```
|
|
git checkout master
|
|
git pull
|
|
git reset --hard origin/master
|
|
git pull
|
|
```
|
|
|
|
## Lokal ausgecheckter Feature-Branch in master mergen
|
|
|
|
Vorgehensweise: Lokal in den master-Branch mergen und dann nach origin/master pushen.
|
|
|
|
Der übliche Weg sieht etwa so aus (ohne Pull-Request-Workflow):
|
|
|
|
- Auf master wechseln (lokal): `git checkout master`
|
|
- Aktuellste Änderungen von origin/master holen und mit lokalem master synchronisieren: `git pull origin master`
|
|
- Deinen Feature-Branch in den lokalen master mergen (angenommen, Dein Branch heißt feature/mybranch): `git merge feature/mybranch`
|
|
- Falls Merge-Konflikte auftreten, diese im Code beheben, Dateien committen, sodass der Merge abgeschlossen werden kann.
|
|
- Änderungen auf den Remote-Master pushen: `git push origin master`
|
|
|
|
Nun ist der Code aus `feature/mybranch` in `origin/master` eingeflossen.
|
|
|
|
## Remote Branch als neuen local branch
|
|
|
|
```
|
|
git fetch origin
|
|
# Anzeigen aller Branches
|
|
git branch -a
|
|
# zuerst local dann origin-name angeben:
|
|
git checkout -b INITIATIVE-242_Ru origin/INITIATIVE-242_Ru
|
|
```
|
|
|
|
## Branch löschen
|
|
|
|
### Lokal löschen
|
|
|
|
```
|
|
git branch -d <branchname> (wenn gemergt)
|
|
git branch -D <branchname> (um zu erzwingen)
|
|
```
|
|
|
|
### Remote löschen
|
|
|
|
|
|
```
|
|
git push origin --delete <branchname>
|
|
|
|
```
|
|
|
|
## Tag löschen
|
|
|
|
### Lokal
|
|
|
|
```
|
|
git tag -d tagname
|
|
```
|
|
|
|
### Remote
|
|
|
|
```
|
|
git push --delete origin tagname
|
|
```
|
|
|
|
## 1 oder mehrere Commits zurück
|
|
|
|
### 1 Schritt zurück
|
|
|
|
```
|
|
git reset --hard HEAD~1
|
|
```
|
|
|
|
### Mehrere Schritte zurück
|
|
|
|
```
|
|
git reset --hard <commit-id>
|
|
```
|
|
|
|
! nicht vergessen, anschliessend für remote anpassen:
|
|
|
|
```
|
|
git push -f
|
|
```
|
|
|
|
## Overwrite local history with remote
|
|
|
|
```
|
|
git fetch --all
|
|
git reset --hard <remote>/<branch-name>
|
|
```
|
|
|
|
## Eigenen Branch mit dem Master-Branch aktualisieren
|
|
|
|
```
|
|
git checkout master
|
|
git pull
|
|
git checkout xyz
|
|
git rebase -i master
|
|
```
|
|
|
|
... hier die Konflikte lösen ...
|
|
|
|
```
|
|
git add .
|
|
git rebase --continue
|
|
git push --force-with-lease
|
|
```
|
|
|
|
## Neuer Branch aus falschem Branch
|
|
|
|
### Ausgangslage
|
|
|
|
Neuer Branch (b) wurde fälschlicherweise aus einem anderen Branch (a) (anstatt dem Master) erstellt. Die Files aus (a) sind nun doppelt vorhanden, nämlich auch in (b). Bei einem Pull-Request für (b) sind dann die files auch von (a) drin.
|
|
|
|
### Problemlösung
|
|
|
|
```
|
|
git checkout master
|
|
git pull
|
|
git checkout (b)
|
|
git pull
|
|
git rebase -i master
|
|
```
|
|
|
|
bei den commits aus (b), also die, die nicht in den neuen branch gehören, ein d vorne dran (anstatt bestehendem pick) und speichern
|
|
|
|
```
|
|
git log (zum prüfen ob ok)
|
|
git push --force-with-lease
|
|
|
|
```
|