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 Tasks with Git Hooks

- 09.07.26 - ErcanOPAK

🔧 Git Hooks = Automation Power

Manual tasks are repetitive. Git hooks automate at Git events. Pre-commit, post-merge, pre-push — automate your workflow.

📝 Available Hooks

# Client-side hooks
pre-commit     # Before commit
prepare-commit-msg # After commit message creation
commit-msg     # Before commit message final
post-commit    # After commit
pre-rebase     # Before rebase
post-checkout  # After checkout
post-merge     # After merge
pre-push       # Before push

# Server-side hooks
pre-receive    # Before receiving push
update         # Per branch update
post-receive   # After receiving push

# Hook locations
.git/hooks/
- pre-commit.sample
- commit-msg.sample
- etc.

# Enable hooks
# Remove .sample extension
mv .git/hooks/pre-commit.sample .git/hooks/pre-commit

🎯 Pre-commit Hook Examples

# .git/hooks/pre-commit (bash)
#!/bin/sh

# Run linter
echo "Running linter..."
npm run lint
if [ $? -ne 0 ]; then
    echo "Linting failed. Fix errors before committing."
    exit 1
fi

# Run tests
echo "Running tests..."
npm test
if [ $? -ne 0 ]; then
    echo "Tests failed. Fix errors before committing."
    exit 1
fi

# Check for debugging code
if grep -n "console.log(" `git diff --cached --name-only`; then
    echo "Error: Remove console.log statements before committing"
    exit 1
fi

echo "Pre-commit checks passed!"
exit 0

# Pre-commit with Node.js
#!/usr/bin/env node
const { execSync } = require('child_process');

try {
    // Run lint-staged
    execSync('npx lint-staged', { stdio: 'inherit' });
    
    // Run unit tests
    execSync('npm test -- --coverage', { stdio: 'inherit' });
    
    console.log('✅ All checks passed!');
} catch (error) {
    console.error('❌ Pre-commit checks failed!');
    process.exit(1);
}

💡 Hook Best Practices

  • Keep hooks fast (performance)
  • Use –no-verify to skip (if needed)
  • Share hooks via scripts
  • Test hooks carefully
  • Use Husky for easier management

“Git hooks automate your workflow. Pre-commit, pre-push, post-merge. Essential for development automation.”

— DevOps Engineer

Related posts:

Git: Create Aliases for Common Commands to Save Typing

Git: Use Git Clean to Remove Untracked Files

Git Repositories Grow Too Fast

Post Views: 0

Post navigation

Ajax: Master API Authentication (JWT, OAuth)
.NET Core: Master Logging with Serilog and NLog

Leave a Reply Cancel reply

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

July 2026
M T W T F S S
 12345
6789101112
13141516171819
20212223242526
2728293031  
« Jun    

Most Viewed Posts

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

Recent Posts

  • C#: Use Using Statements for Resource Management
  • C#: Use Lambda Expressions for Concise Code
  • SQL: Use GROUP BY for Data Aggregation
  • .NET Core: Master Routing for Clean URLs
  • Git: Use Reset to Undo Local Changes
  • Ajax: Use Axios for HTTP Requests
  • JavaScript: Understand Hoisting
  • HTML: Use Web Storage for Client-Side Data
  • CSS: Use Filter Effects for Visual Magic
  • Windows 11: Unlock God Mode for All Settings

Most Viewed Posts

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

Recent Posts

  • C#: Use Using Statements for Resource Management
  • C#: Use Lambda Expressions for Concise Code
  • SQL: Use GROUP BY for Data Aggregation
  • .NET Core: Master Routing for Clean URLs
  • Git: Use Reset to Undo Local Changes

Social

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