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
Change Microsoft SQL Server Data Location

Change Microsoft SQL Server Data Location

Let’s say you have an existing Microsoft SQL data and want to move it to a different disk or directory. Running the query below shows the logical name and the file location of your schema. SELECT name AS FileLogicalName, physical_name AS FileLocation FROM sys.master_files WHERE database_id = DB_ID('HR'); Existing Location FileLogicalName FileLocation HR C:\MSSQL_DATA\OldPath\HR.mdf HR_log C:\MSSQL_DATA\OldPath\HR.ldf Target New Location FileLogicalName FileLocation HR D:\MSSQL_DATA\MSSQL15.MSSQLSERVER\MSSQL\Data\HR.mdf HR_log D:\MSSQL_DATA\MSSQL15.MSSQLSERVER\MSSQL\Data\HR.0.ldf Steps to move the database files Take the database offline ...

March 28, 2025 · John Pili
recursively-delete-files-with-a-specific-file-extension.webp

Recursively delete files with a specific file extension

Delete files with specified file extension recursively. This is useful when you want to remove those temporary files or those unwanted auto-generated artifacts inside nested folders. Be careful when using these commands because it will delete files permanently Linux Bash find . -type f -name "*.tmp" -delete find . -type f -name "*.tmp" -exec rm -v "{}" + Windows Powershell Get-ChildItem * -Include *.tmp -Recurse | Remove-Item

October 27, 2024 · John Pili
using-unix-domain-socket-in-go.webp

Using Unix Domain Socket in Go

You can use Unix Domain Socket aka AF_UNIX for your interprocess communication. Previously, It was only available in a Linux/Unix operating system until Microsoft added it in Microsoft Windows in the beginning of Insider build 17063. It offers better throughput and improved security package main import ( "log" "net" "net/http" "os" "os/signal" "syscall" ) func main() { socketPath := "uds.sock" socket, err := net.Listen("unix", socketPath) if err != nil { log.Fatal(err) } c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) go func(p string) { <-c if err := os.Remove(p); err != nil { os.Exit(1) } os.Exit(0) }(socketPath) m := http.NewServeMux() m.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("GET...")) }) m.HandleFunc("POST /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("POST...")) }) m.HandleFunc("PUT /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("PUT...")) }) m.HandleFunc("DELETE /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("DELETE...")) }) if err := http.Serve(socket, m); err != nil { log.Fatal(err) } } Source Code https://github.com/johnpili/go-using-unix-domain-socket

February 14, 2024
Check JPA Query Type

Check JPA Query Type

I am developing a repository as a service application. An application that let users create their endpoints with queries via a web interface. This application uses either Hibernate or Eclipselink as a JPA provider. The challenge is to check if the supplied user string (query) is a native SQL or a JPQL and that Eclipselink and Hibernate handles this differently, so I decided to wrap it behind this simple checker. ...

January 28, 2024 · John Pili
using-vue-without-a-build-step.webp

Using Vue without a build step

Background I would like to share my experience using Vue 2 without a build step in my project and factors using this approach. I started experimenting with Vue.js (Vue 2) back in 2020. One of the nice feature of Vue is the ability to use the framework directly into HTML page without a build tool (compilation). This particular feature is the deciding factor why I selected this framework in migrating a jQuery based web application. I also considered how easy it is to learn and train my team. ...

October 25, 2023 · John Pili
set-http-request-body-size-in-go.webp

Set HTTP Request Body Size in Go

Use http.MaxBytesReader to limit and control the size HTTP request body. This is a good practice to prevent abuse and save bandwidth. In the example below, I set a 20 bytes HTTP request body size limit. package main import ( "github.com/julienschmidt/httprouter" "io" "log" "net/http" "time" ) func main() { router := httprouter.New() router.HandlerFunc(http.MethodPost, "/", func(w http.ResponseWriter, r *http.Request) { buffer, err := io.ReadAll(http.MaxBytesReader(w, r.Body, 20)) defer r.Body.Close() if err != nil { w.WriteHeader(http.StatusBadRequest) log.Println(string(buffer)) return } log.Println(string(buffer)) }) httpServer := &http.Server{ Addr: ":8080", Handler: router, ReadTimeout: 120 * time.Second, WriteTimeout: 120 * time.Second, } log.Fatal(httpServer.ListenAndServe()) } Test Content Length 20 bytes ...

October 23, 2023 · John Pili
boot-linux-without-a-splash-screen.webp

Boot Linux without a splash screen

If you prefer to boot up your Linux machine with the boot messages rather than the distro splash screen. You can enable that by editing the file /etc/default/grub and set the value of GRUB_CMDLINE_LINUX_DEFAULT to an empty string. Example: GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="" After editing the file, execute update-grub to load your configuration into the bootloader. sudo /usr/sbin/update-grub Output of update-grub Generating grub configuration file ... Found background image: /usr/share/images/desktop-base/desktop-grub.png Found linux image: /boot/vmlinuz-6.1.0-10-arm64 Found initrd image: /boot/initrd.img-6.1.0-10-arm64 Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. Adding boot menu entry for UEFI Firmware Settings ... done

August 5, 2023 · John Pili
start-a-react-project-without-using-cra.webp

Start a React project without using CRA

Let’s start a React project without using create-react-app (CRA). CRA is a good project starter but for those who wants a complete control over the building process, we will have to use bundler tools like webpack or yarn. Prerequisites React.js knowledge Installed and configures NodeJS Installed node package manager (npm) Steps Using the command-line, let us follow the following steps: Create directories and files mkdir webapp cd webapp Let us continue with our src folder and placeholder files ...

May 30, 2023 · John Pili
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