git-cheat-sheet.webp

Git Cheat Sheet

Creating or cloning a Repository git init Initializes a new Git repository in the current directory git clone https://git[.]johnpili[.]com/path/to/repo.git Clones a repository using HTTPS protocol from a remote location git clone ssh://git[.]johnpili[.]com/path/to/repo.git Clones a repository using SSH protocol from a remote location git clone git://git[.]johnpili[.]com/path/to/repo.git Clones a repository using Git protocol from a remote location git clone ~/handler Clones a local repository from the home directory’s handler folder git clone –branch feature/query-loader https://git[.]johnpili[.]com/path/to/repo.git Clones a specific branch (feature/query-loader) from a remote repository Staging Area git status Shows the status of files in the working directory and staging area git add main.go Adds the specific file ‘main.go’ to the staging area git add . Adds all new and modified files in the current directory to the staging area git add environment Adds the ’environment’ directory or file to the staging area git rm main.go Removes ‘main.go’ from both the working directory and staging area git mv config.xml environment Moves ‘config.xml’ to the ’environment’ directory and stages the change git mv config.xml dev-config.xml Renames ‘config.xml’ to ‘dev-config.xml’ and stages the change git reset Unstages all files, keeping the working directory unchanged git reset main.go Unstages the specific file ‘main.go’, keeping the working directory unchanged git diff config.xml Shows unstaged changes in ‘config.xml’ compared to the staging area Commits: Creating Snapshots git commit Opens default editor to write a commit message and create a new commit git commit -m “Initial commit” Creates a new commit with the specified message without opening an editor git commit -am “Message” Stages all modified tracked files and commits them with the specified message git commit –amend Modifies the last commit by adding staged changes and/or editing the commit message git tag -a v2025.1 ef5bb78 -m “Release version 2025.1” Creates an annotated tag for commit ef5bb78 with a specified message without editor git tag Lists all tags in the repository Commit Logs git log Shows commit history with full commit messages git log -3 Shows only the last 3 commits git log –stat Shows commit history with files changed and number of modifications git log –before=“2025-01-21” Shows commits made before January 21, 2025. The Date formats in and are flexible (e.g., “2025-01-21”, “3 days ago”, “yesterday”) git log –after=“2025-01-15” Shows commits made after January 15, 2025 git log -p main.go Shows commit history with patches (changes) for main.go file git log –grep “Camunda” Shows commits whose message contains the word “Camunda”. --grep is case-sensitive by default; use -i flag for case-insensitive search git diff ef5bb78 ab0c0df Shows differences between two specific commits git show ab0c0df Shows details of a specific commit (changes, message, author, etc.) git show ab0c0df main.go Shows changes made to main.go file in the specific commit Branching git branch Lists all local branches (* marks current branch) git branch feature/user-login Creates a new branch named ‘feature/user-login’ at current position git checkout feature/query-loader Switches to existing branch ‘feature/query-loader’ git checkout -b feature/query-loader Creates and switches to new branch ‘feature/query-loader’ git switch -c feature/query-loader A modern alternative to git checkout.Creates and switches to new branch ‘feature/query-loader’ git branch -m feature/backdoor Renames current branch to ‘feature/backdoor’ git merge develop Merges ‘develop’ branch into current branch git branch -d feature/backdoor Deletes branch ‘feature/backdoor’ (if fully merged) git branch -D feature/backdoor Forces deletion of branch ‘feature/backdoor’ (even if not merged) git diff feature/query-loader develop Shows differences between ‘feature/query-loader’ and ‘develop’ branches git diff feature/query-loader main.go Shows changes to main.go file in ‘feature/query-loader’ vs current branch git branch –merged Lists branches merged into current branch git branch –no-merged Lists branches not yet merged git branch -v Shows last commit on each branch git branch -r Lists remote branches git branch -a Lists all branches (local and remote) git log –graph –all Shows commit history of all branches with ASCII graph visualization git log –graph –all –oneline A compact visualization of --graph Rebase git rebase develop Reapplies your current branch’s commits on top of the develop branch git rebase –abort Cancels an in-progress rebase and returns to the state before rebase started git rebase –continue Continues the rebase process after resolving conflicts git rebase -i Opens interactive rebase mode, allowing you to modify, reorder, or squash commits Important: Rebasing rewrites commit history, so it should generally be avoided on commits that have been pushed to shared repositories unless you’re absolutely sure about the implications. ...

April 27, 2025
pragmatic-programmer-its-your-life.webp

The Pragmatic Programmer - It's your life

A sound bite from The Pragmatic Programmer: Your Journey To Mastery, 20th Anniversary Edition (2nd Edition) Interested? You can grab a copy of this book from Amazon. https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052

January 17, 2023 · John Pili
fix-raspberry-pi-ssh-freezing-issue.webp

Fix Raspberry Pi SSH freezing issue

If your SSH connection to your Raspberry Pi is freezing or unstable it could be because of OpenSSH TOS (Type of Service). To fix this, add IPQoS cs0 cs0 in the sshd configuration file. Open your /etc/ssh/sshd_config and add IPQoS cs0 cs0 at the bottom of the file. Please refer to the example configuration file below. # $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key #HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging #SyslogFacility AUTH #LogLevel INFO # Authentication: #LoginGraceTime 2m #PermitRootLogin prohibit-password #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 #PubkeyAuthentication yes # Expect .ssh/authorized_keys2 to be disregarded by default in future. #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. UsePAM yes #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no #X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes PrintMotd no #PrintLastLog yes #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #UseDNS no #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # no default banner path #Banner none # Allow client to pass locale environment variables AcceptEnv LANG LC_* # override default of no subsystems Subsystem sftp /usr/lib/openssh/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server IPQoS cs0 cs0

November 9, 2021 · John Pili
load-balancing-and-redundant-internet-connection-using-tp-link-er6020.webp

Load balancing and redundant Internet connection using TP-Link ER6020

Overview I started my homelab journey in 2017, set up a small server to host my files and to test my web applications. Today, I am giving my small network a bit of an upgrade by having a redundant Internet connection using a TP-Link ER6020. I appreciate that TP-Link made their enterprise network devices affordable. If you are living in Kuala Lumpur and thinking of buying TP-Link’s enterprise network devices. Go to Sri computers in Lowyat plaza, they usually have stocks. ...

March 17, 2020 · John Pili