nx1.info | Git

useful tips & Guides https://longair.net/blog/2009/04/16/git-fetch-and-merge/

List branches:

git branch --list <--local only git branch --list -all <--remotes too

Create and switch to new local branch

> git checkout -b newbranch

Push new branch to remote

> git push -u origin newbranch

How to change git credentials:

To check git credentials (in repo) > git config user.name > git config user.email > git config --list option 1: export GIT_AUTHOR_NAME="nk" export GIT_AUTHOR_EMAIL="n@k.com" export GIT_COMMITTER_NAME="nk" export GIT_COMMITTER_EMAIL="n@k.com" Option 2: to update (global): git config --global user.name "nk" git config --global user.email "n@k.com" local: git config user.name "nk" git config user.email = "n@k.com"

How to incorperate changes from master branch into current branch

Option 1: > git checkout mybranch > git merge master_branch Option 2: > git checkout mybranch > git rebase master_branch >option 3: git checkout mybranch git stash push -m 'wip tree branch before pulling' git pull --rebase origin master_branch # fix any merge conflicts git stash pop

How to combine changes on a local branch with a remote branch and push them

Assuming you already have commited the changes locally. stash uncommited changes. > git stash fetch and merge changes from remote branch > git fetch origin staging > git merge origin/staging push to local branch as specified remote branch. > git push origin sb_tree:staging unpop changes if needed: > git stash pop

How to make mac remember ssh passphrase.

> ssh-add --apple-use-keychain ~/.ssh/id_rsa and in ~/.ssh/config add the following: Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa rebash to view listed keys do: > ssh-add -l

Selective merging.

What happened: new branch master was created from tree. too many changes were added to tree, master is still the same. we want to selecively merge specific lines from the updated tree branch into master. 1. update origin listing > git fetch > git status: On branch tree Your branch is behind 'origin/tree' by 6 commits, and can be fast-forwarded. (use "git pull" to update your local branch) Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: smartbench/debug/send_messages.py no changes added to commit (use "git add" and/or "git commit -a") 1. Switch to the master branch > git checkout master x1@pc:~/projects/matoha-smartbench$ git log --oneline 00fa98c (HEAD -> master, origin/master, tree) supress kafka messages to CRITIAL only We are in the right place on this branch but we want to selectively merge some changes from the new tree to see the which files are different between the master branch and the updated tree branch use: > git diff master origin/tree --name-only x1@Normans-Mac-mini:~/projects/matoha-smartbench$ git diff master origin/tree --name-only .gitlab-ci.yml logger.py run_smartbench.sh smartbench/app_gui/Dockerfile smartbench/app_gui/blocks/results_block.py smartbench/app_gui/camera_capture/basler_capture.py smartbench/app_gui/camera_capture/camera_capture.py smartbench/app_gui/camera_capture/camera_manager.py smartbench/app_gui/camera_capture/camera_worker_thread.py smartbench/app_gui/camera_capture/test_camera_manager.py smartbench/app_gui/deepstream_processor.py smartbench/app_gui/kafka_handler.py smartbench/app_gui/main_gui.py smartbench/app_gui/run.sh smartbench/app_gui/test_main_gui.py smartbench/barcode/barcode_scanner.py smartbench/data_manager/api_submitter.py smartbench/data_manager/data_manager.py smartbench/data_manager/decision_tree/decision_tree.py smartbench/data_manager/public_api.py smartbench/get_details.py smartbench/matoha_kafka/matoha_kafka.py smartbench/metal_detection/metal_detection.py smartbench/metal_detection/run_metal_detection.py smartbench/rfid/rfid.py smartbench/weighing_scale/weighing_scale.py as you can see there are a crapton. to selectively merge specific bits we can do the following using pycharm. In settings, do: Git --> Branches... then select remote/origin/tree --> compare with `master' This will show all the commits that exist in origin/tree but do not exist in master and vice versa. clicking on a commit will show the files that were changed on the commit. right clicking on a file and doing show diff will then show the diffs for the specific file. use compare with local accept / reject the changes we want. check files using > git diff git add files and commit.

Making an existing folder into a git repo and adding a remote.

First create a repo on gitlab / github. locally: git init --initial-branch=main --object-format=sha1 git remote add origin git@gitlab.com:NormanKhan/kafka_tests.git git add . git commit -m "Initial commit" git push --set-upstream origin main

Removing old unused Branches.

First check the branch you are going to delete for diffrences between it and the branch you want to keep (i.e. master) > git log master..origin/display_collection_name --oneline If this line returns anything, it means that there are commits that exist on the old branch that do not exist on the master branch. (If you want to know the other way, just flip the order of the branches i.e. git log origin/display_collection_name..master --oneline <-- This will return much much more haha. In this case it returned the following: 3215915 (origin/display_collection_name) gui stuff To see what those changes were explicitly, one can do: git show 3215915 Once happy with the state of the code, the branch may be deleted using: # Delete a local branch git branch -d branch_name # safe - refuses if unmerged git branch -D branch_name # FORCE DELETE REGARDLESS!!! # Delete from remote (GitLab) git push origin --delete branch_name

Renaming old unused branches

Sometimes there can be old branches that we do not want to delete, case in point we have an old branch called "main" from before we showed up, this guy is still cluttering both gitlab and git, We don't want to delete it exactly but we don't want it there because it is slightly confusing. We can rename the brach locally by doing: git branch -m main archive/main-old Then we can push the renamed branch by doing: git push origin archive/main-old Finally, we can delete the old branch meaning it no longer clogs shit up: git push origin --delete main

Cherry pick merge request

Problem: we add something to merge staging but we don't want to merge in everything, only that specific change we've made. 1. find the commit hash of the commit on staging > git log copy the hash, e.g: 832cdd9ce0f12ba57dae2eac74d7aad6c2d5bfb0 2. change to the branch you want to create the merge request into and pull latest changes: > git checkout master > git pull origin master 3. Create a new branch off the master branch for the merge request. > git checkout -b update-docker-compose 4. Cherry pick the commit we want > git cherry-pick 832cdd9ce0f12ba57dae2eac74d7aad6c2d5bfb0 x1@Normans-Mac-mini:~/projects/matoha-smartbench$ git cherry-pick 832cdd9ce0f12ba57dae2eac74d7aad6c2d5bfb0 Auto-merging docker-compose.yml [update-docker-compose 89a2144] Removed deploy policy from docker compose to prevent container restarts on unclean shutdowns Date: Mon Jun 1 09:39:57 2026 +0100 1 file changed, 13 insertions(+), 48 deletions(-) 5. Push the new branch to the master. git push origin update-docker-compose 6. Create the merge request on github/gitlab