Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
Git

Git: Automate Workflows with Git Hooks

- 17.08.26 - ErcanOPAK

🔗 Git Hooks = Automation Power

Manual checks are error-prone. Git hooks automate tasks before commits, pushes, and merges.

📝 Git Hook Setup

# Navigate to hooks directory
cd .git/hooks

# Common hooks
pre-commit      # Run before commit
prepare-commit-msg  # Edit commit message
commit-msg      # Validate commit message
post-commit     # Run after commit
pre-push        # Run before push
post-checkout   # Run after checkout
pre-rebase      # Run before rebase
post-merge      # Run after merge

# Create a pre-commit hook
#!/bin/sh
# .git/hooks/pre-commit

# Run linter before commit
npm run lint

# Run tests before commit
npm test

# Check for debugging code
if grep -r 'console.log' src/; then
    echo 'Error: Console.log found in code'
    exit 1
fi

# Make it executable
chmod +x .git/hooks/pre-commit

🎯 Advanced Git Hooks

# commit-msg (Validate commit messages)
#!/bin/sh
# .git/hooks/commit-msg

commit_msg_file=$1
commit_msg=$(cat "$commit_msg_file")

# Check commit message format
if ! echo "$commit_msg" | grep -qE '^(feat|fix|docs|style|refactor|test|chore): .+'; then
    echo "Error: Commit message must follow conventional commits format:"
    echo "feat: add feature X"
    echo "fix: resolve bug Y"
    exit 1
fi

# pre-push (Run tests before push)
#!/bin/sh
# .git/hooks/pre-push

echo "Running tests before push..."
npm test
if [ $? -ne 0 ]; then
    echo "Tests failed. Push aborted."
    exit 1
fi

# post-merge (Install dependencies after merge)
#!/bin/sh
# .git/hooks/post-merge

if [ -f package.json ]; then
    npm install
fi

# pre-rebase (Prevent rebase on main)
#!/bin/sh
# .git/hooks/pre-rebase

branch=$(git branch --show-current)
if [ "$branch" = "main" ] || [ "$branch" = "master" ]; then
    echo "Error: Cannot rebase on main branch"
    exit 1
fi

💡 Git Hook Best Practices

  • Keep hooks fast (<1-2 seconds)
  • Use husky for team hook management
  • Validate commit messages
  • Run tests before push
  • Install dependencies after merge

Git hooks enforce quality automatically. They catch issues before they reach the repository.

— DevOps Engineer

Related posts:

Git: Advanced Git Commands for Power Users

Git: Use Rebase for Clean Commit History

Git: Use git cherry-pick to Copy Commits Between Branches

Post Views: 5

Post navigation

AJAX: Master Fetch API for Modern HTTP Requests
HTML: Semantic Elements for SEO and Accessibility

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (952)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (624)
  • Add Constraint to SQL Table to ensure email contains @ (590)
  • Average of all values in a column that are not zero in SQL (553)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (526)
  • Find numbers with more than two decimal places in SQL (468)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps
  • Photoshop: Fix a Color Profile Mismatch That Makes Printed Output Look Nothing Like What You Saw On Screen
  • WordPress: Fix Search Results That Return Pages From a Theme You Deactivated Months Ago
  • Visual Studio: Fix a Test Project That Builds Fine Alone but Fails to Discover Any Tests After a NuGet Restore
  • ASP.NET Core: Fix a File Upload That Times Out on Slow Connections Only Because Kestrel’s Minimum Data Rate Feature Kicked In
  • JavaScript: Fix an Array Destructuring Default Value That Silently Never Applies Because null Was Passed Instead of Undefined

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (952)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com