git
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
git [2023/01/06 17:58] – Add mention you can pull --rebase if you feel lucky dblume | git [2024/06/12 11:29] (current) – dblume | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== git ====== | ====== git ====== | ||
- | Make the clone at the remote repository. | + | Make the clone of the remote repository. |
< | < | ||
Line 11: | Line 11: | ||
</ | </ | ||
- | Double checking the remote names... | + | If it's a huge repo, [[https:// |
< | < | ||
- | $ git remote | + | git clone \ |
- | origin | + | |
- | origin | + | -b main \ |
- | upstream | + | --single-branch \ |
- | upstream | + | --no-tags \ |
+ | | ||
+ | --recurse-submodules=os/components/toolchain \ | ||
+ | | ||
+ | git@fake.github.com:project/project.git | ||
</ | </ | ||
+ | |||
+ | Eventually, if you want to add another branch to a single-branch clone: | ||
+ | |||
+ | git remote set-branches --add origin another-branch | ||
+ | |||
+ | Or to de-single-branch-ize a clone: | ||
+ | |||
+ | git remote set-branches origin " | ||
+ | |||
===== Creating a new remote repository from an existing local one ===== | ===== Creating a new remote repository from an existing local one ===== | ||
Line 48: | Line 61: | ||
<code bash> | <code bash> | ||
- | $ git fetch --all # TODO investigate why fetch | + | $ git fetch --all # Bring your copy of the remote up-to-date |
$ git remote prune origin | $ git remote prune origin | ||
</ | </ | ||
Line 64: | Line 77: | ||
$ git push --set-upstream origin new_branch | $ git push --set-upstream origin new_branch | ||
+ | ==== Creating a local branch from an existing remote ==== | ||
+ | |||
+ | After doing a fetch, and suppose " | ||
+ | |||
+ | $ git switch remote-branch | ||
==== Changing a local branch to a new remote branch ==== | ==== Changing a local branch to a new remote branch ==== | ||
Line 106: | Line 124: | ||
git switch main | git switch main | ||
git branch -d bugfix/ | git branch -d bugfix/ | ||
+ | git pull | ||
+ | </ | ||
+ | |||
+ | ====== Resolving a Merge Conflict ====== | ||
+ | |||
+ | < | ||
+ | git mergetool (possibly with filename) | ||
+ | |||
+ | # +----------+-----------+------------------+ | ||
+ | # | (others) | (common) | ||
+ | # | LOCAL | BASE | REMOTE | ||
+ | # +-----------------------------------------+ | ||
+ | # | | | ||
+ | # | temp file with <<< | ||
+ | # +-----------------------------------------+ | ||
+ | |||
+ | git commit -a -m " | ||
+ | </ | ||
+ | |||
+ | Possibly keep rebasing. | ||
+ | < | ||
+ | git rebase --continue | ||
git pull | git pull | ||
</ | </ | ||
Line 132: | Line 172: | ||
<code bash> | <code bash> | ||
git pull --rebase | git pull --rebase | ||
+ | </ | ||
+ | |||
+ | ====== Applying changes in a stash to a changed file ===== | ||
+ | |||
+ | When '' | ||
+ | |||
+ | < | ||
+ | git stash show -p | patch -p0 | ||
</ | </ | ||
Line 176: | Line 224: | ||
</ | </ | ||
- | I could' | + | Options are: |
+ | |||
+ | * I chose GitHub-like [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | ====== Limit scope of huge repos ====== | ||
+ | |||
+ | Create a .gitconfig file at the base of your repo: | ||
+ | <file git .gitconfig> | ||
+ | [remote " | ||
+ | fetch = +refs/ | ||
+ | fetch = +refs/ | ||
+ | tagopt = --no-tags | ||
+ | </ | ||
+ | |||
+ | Or explicitly specify your flags: | ||
+ | <code bash> | ||
+ | git fetch --no-tags origin main | ||
+ | git pull --no-tags origin main | ||
+ | git submodule foreach git pull --no-tags origin main | ||
+ | </ | ||
+ | |||
+ | The submodule one is an optimization for the more general: | ||
+ | <code bash> | ||
+ | git submodule update --recursive | ||
+ | </ | ||
+ | |||
+ | ====== Submodules ====== | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | Cloning a repo doesn' | ||
+ | |||
+ | <code bash> | ||
+ | git submodule update --init --recursive | ||
+ | </ | ||
+ | |||
+ | Git pull and checkout don't update submodules. To actually update them, you have to run the following every time you switch branches or pull. | ||
+ | |||
+ | <code bash> | ||
+ | git submodule update --recursive | ||
+ | </ | ||
====== git vim mergetool on macOS ====== | ====== git vim mergetool on macOS ====== |
git.1673056683.txt.gz · Last modified: 2023/04/12 20:44 (external edit)