git自動壓縮提交的腳本

可以將當前未提交的代碼自動執行

  • git add
  • git commit
  • git squash

Git 命令安裝指南

1. 創建腳本目錄

如果目錄不存在,創建它:

mkdir -p ~/.local/bin

2. 創建腳本文件

vim ~/.local/bin/git-squash

將完整的腳本代碼復制到此文件中。

3. 設置腳本權限

chmod +x ~/.local/bin/git-squash

4. 配置 PATH

編輯 shell 配置文件(根據你使用的 shell 選擇):

# 對于 bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc# 或對于 zsh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

重新加載配置:

source ~/.bashrc  # 或 source ~/.zshrc

5. 創建 Git 別名

git config --global alias.allen-squash '!git-squash'

6. 驗證安裝

檢查腳本是否可執行:

ls -l ~/.local/bin/git-squash

檢查腳本是否在 PATH 中:

which git-squash

檢查 git 別名是否設置成功:

git config --get-regexp alias.*squash

7. 使用方法

可以通過以下兩種方式使用:

# 直接使用腳本
git-squash# 或使用 git 別名
git allen-squash

8. 常見問題排查

命令未找到

  1. 檢查 PATH:
echo $PATH | grep -o ~/.local/bin
  1. 檢查腳本權限:
ls -l ~/.local/bin/git-squash
  1. 檢查 git 別名:
git config --list | grep allen-squash

管理別名

# 刪除別名
git config --global --unset alias.allen-squash# 修改別名
git config --global alias.allen-squash '!git-squash'

編輯腳本

vim ~/.local/bin/git-squash

9. 備份建議

建議進行以下備份:

# 備份腳本
cp ~/.local/bin/git-squash ~/.local/bin/git-squash.backup# 備份 git 配置
cp ~/.gitconfig ~/.gitconfig.backup

10. 更新腳本

如需更新腳本:

# 編輯腳本
vim ~/.local/bin/git-squash# 確保權限正確
chmod +x ~/.local/bin/git-squash

注意事項

  1. 確保 ~/.local/bin 目錄存在并在 PATH 中
  2. 確保腳本具有可執行權限
  3. 重啟終端或重新加載配置文件后更改才會生效
  4. 建議在使用前先進行配置備份
  5. 如果遇到權限問題,檢查用戶權限和文件權限

故障排除

如果命令不能正常工作,請按以下步驟檢查:

  1. 確認腳本位置:

    • 檢查 ~/.local/bin/git-squash 是否存在
    • 確認文件權限是否正確
  2. 檢查 PATH 設置:

    • 確認 ~/.local/bin 在 PATH 中
    • 檢查 shell 配置文件是否正確加載
  3. 驗證 git 別名:

    • 檢查別名是否正確設置
    • 確認 git 配置文件是否正確

腳本內容

#!/bin/bash# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color# 全局變量
COMMITS_TO_SQUASH=0# 錯誤處理函數
handle_error() {echo -e "${RED}Error: $1${NC}"exit 1
}# 獲取與main分支的距離和可壓縮提交數量
get_commit_info() {# 獲取當前分支名current_branch=$(git branch --show-current)# 獲取當前分支的總提交數total_commits=$(git rev-list HEAD --count)# 嘗試獲取與main分支的距離if git rev-parse --verify main >/dev/null 2>&1; thencommits_from_main=$(git rev-list --count main..HEAD)echo -e "\n${YELLOW}Commit information:${NC}"echo -e "Current branch: ${GREEN}$current_branch${NC}"echo -e "Total commits in current branch: ${GREEN}$total_commits${NC}"echo -e "Commits ahead of main: ${GREEN}$commits_from_main${NC}"echo -e "Maximum commits that can be squashed: ${GREEN}$commits_from_main${NC}"elseecho -e "\n${YELLOW}Commit information:${NC}"echo -e "Current branch: ${GREEN}$current_branch${NC}"echo -e "Total commits in current branch: ${GREEN}$total_commits${NC}"echo -e "Main branch not found - cannot calculate distance from main"echo -e "Maximum commits that can be squashed: ${GREEN}$total_commits${NC}"fi
}# 顯示最近的提交歷史并獲取壓縮數量
show_recent_commits() {echo -e "\n${YELLOW}Recent commits:${NC}"git --no-pager log --oneline -n 5# 計算與main分支的距離commits_ahead=$(git rev-list --count main..HEAD)echo -e "\n${YELLOW}Valid squash range:${NC}"echo -e "Minimum commits: ${GREEN}2${NC}"echo -e "Maximum commits: ${GREEN}$commits_ahead${NC} (number of commits ahead of main)"while true; doecho -e "\n${YELLOW}How many commits do you want to squash? (${GREEN}2${NC} to ${GREEN}$commits_ahead${NC})${NC}"read -r commits_count# 驗證輸入是否在有效范圍內if [[ "$commits_count" =~ ^[0-9]+$ ]] && [ "$commits_count" -ge 2 ] && [ "$commits_count" -le "$commits_ahead" ]; thenCOMMITS_TO_SQUASH=$commits_countbreakelseecho -e "${RED}Please provide a number between 2 and $commits_ahead${NC}"fidone
}# 創建備份分支
create_backup() {current_branch=$(git branch --show-current)backup_branch="${current_branch}_backup_$(date +%Y%m%d_%H%M%S)"git branch $backup_branch || handle_error "Failed to create backup branch"echo -e "${GREEN}Created backup branch: $backup_branch${NC}"
}# 執行squash操作
do_squash() {local commits_count=$1echo -e "\n${YELLOW}Will squash last $commits_count commits:${NC}"git --no-pager log --oneline -n "$commits_count"echo -e "\n${YELLOW}Do you want to continue? (y/n)${NC}"read -r responseif [[ ! "$response" =~ ^[Yy]$ ]]; thenecho "Operation cancelled"exit 0fi# 創建備份create_backup# 執行交互式rebaseecho -e "\n${YELLOW}Starting interactive rebase...${NC}"echo -e "${YELLOW}In the editor:${NC}"echo -e "1. Leave the first 'pick' as is"echo -e "2. Change 'pick' to 's' or 'squash' for all other commits"echo -e "3. Save and close the editor"echo -e "4. In the next editor, write your combined commit message"if ! git rebase -i HEAD~"$commits_count"; thenecho -e "${RED}Rebase failed. Restoring from backup...${NC}"git rebase --aborthandle_error "Rebase failed"fi
}# 推送更改
push_changes() {echo -e "\n${YELLOW}Do you want to push changes to remote? (y/n)${NC}"read -r responseif [[ "$response" =~ ^[Yy]$ ]]; thencurrent_branch=$(git branch --show-current)echo -e "${YELLOW}Using force push with lease for safety...${NC}"if git push origin "$current_branch" --force-with-lease; thenecho -e "${GREEN}Successfully pushed changes${NC}"elsehandle_error "Push failed"fifi
}# 主函數
main() {# 檢查是否在git倉庫中git rev-parse --git-dir > /dev/null 2>&1 || handle_error "Not in a git repository"# 檢查是否有改動需要提交if git diff-index --quiet HEAD -- && [ -z "$(git ls-files --others --exclude-standard)" ]; thenecho -e "\n${YELLOW}No changes to stage or commit, skipping...${NC}"else# 添加新的暫存和提交步驟echo -e "\n${YELLOW}Staging all changes...${NC}"git add . || handle_error "Failed to stage changes"echo -e "${GREEN}Successfully staged all changes${NC}"echo -e "\n${YELLOW}Creating stage commit...${NC}"git commit -m "stage commit" || handle_error "Failed to create commit"echo -e "${GREEN}Successfully created stage commit${NC}"fi# 顯示提交信息get_commit_info# 顯示當前提交歷史并獲取要壓縮的提交數show_recent_commits# 執行squash操作do_squash "$COMMITS_TO_SQUASH"# 推送更改push_changesecho -e "\n${GREEN}All operations completed successfully${NC}"
}# 執行主函數
main

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64094.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C項目 天天酷跑(下篇)

上篇再博客里面有&#xff0c;接下來我們實現我們剩下要實現的功能 文章目錄 碰撞檢測 血條的實現 積分計數器 前言 我們現在要繼續優化我們的程序才可以使這個程序更加的全面 碰撞的檢測 定義全局變量 實現全局變量 void checkHit() {for (int i 0; i < OBSTACLE_C…

論文解讀——掌紋生成網絡 RPG-Palm升級版PCE-Palm

該文章是2023年論文RPG-Palm的升級版 論文&#xff1a;PCE-Palm: Palm Crease Energy Based Two-Stage Realistic Pseudo-Palmprint Generation 作者&#xff1a;Jin, Jianlong and Shen, Lei and Zhang, Ruixin and Zhao, Chenglong and Jin, Ge and Zhang, Jingyun and Ding,…

代碼隨想錄算法【Day2】

Day2 1.掌握滑動窗口法 2.模擬題&#xff0c;堅持循環不變量原則 209 長度最小的子數組 暴力法&#xff1a; class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {//暴力法int i, j; //i代表起始點&#xff0c;j代表終止點int sum; //…

android——屏幕適配

一、屏幕適配的重要性 在 Android 開發中&#xff0c;屏幕適配是非常關鍵的。因為 Android 設備具有各種各樣的屏幕尺寸、分辨率和像素密度。如果沒有進行良好的屏幕適配&#xff0c;應用可能會出現顯示不完整、元素拉伸或壓縮變形、字體大小不合適等問題&#xff0c;極大地影響…

oscp學習之路,Kioptix Level2靶場通關教程

oscp學習之路&#xff0c;Kioptix Level2靶場通關教程 靶場下載&#xff1a;Kioptrix Level 2.zip 鏈接: https://pan.baidu.com/s/1gxVRhrzLW1oI_MhcfWPn0w?pwd1111 提取碼: 1111 搭建好靶場之后輸入ip a看一下攻擊機的IP。 確定好本機IP后&#xff0c;使用nmap掃描網段&…

第二十六周機器學習筆記:PINN求正反解求PDE文獻閱讀——正問題

第二十六周周報 摘要Abstract文獻閱讀《Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations》1. 引言2. 問題的設置3.偏微分方程的數據驅動解3.1 連續時間模型3.1.1 …

【安全編碼】Web平臺如何設計防止重放攻擊

我們先來做一道關于防重放的題&#xff0c;答案在文末 防止重放攻擊最有效的方法是&#xff08; &#xff09;。 A.對用戶密碼進行加密存儲使用 B.使用一次一密的加密方式 C.強制用戶經常修改用戶密碼 D.強制用戶設置復雜度高的密碼 如果這道題目自己拿不準&#xff0c;或者…

中關村科金智能客服機器人如何解決客戶個性化需求與標準化服務之間的矛盾?

客戶服務的個性化和標準化之間的矛盾一直是一個挑戰。一方面&#xff0c;企業需要提供標準化的服務以保持運營效率和成本控制&#xff1b;另一方面&#xff0c;為了提升客戶滿意度和忠誠度&#xff0c;企業又必須滿足客戶的個性化需求。為此&#xff0c;中關村科金推出了智能客…

OPPO Android面試題及參考答案 (上)

性能優化方面,講一下圖片內存占用計算,以及如何避免持有不必要的引用。 在 Android 中,計算圖片內存占用主要與圖片的尺寸和像素格式有關。對于一張位圖(Bitmap),其內存占用大小可以通過以下方式估算:內存占用 = 圖片寬度 圖片高度 每個像素占用字節數。例如,常見的 …

Agent 案例分析:金融場景中的智能體-螞蟻金服案例(10/30)

Agent 案例分析&#xff1a;金融場景中的智能體 —螞蟻金服案例 一、引言 在當今數字化時代&#xff0c;金融行業正經歷著深刻的變革。隨著人工智能技術的飛速發展&#xff0c;智能體&#xff08;Agent&#xff09;在金融場景中的應用越來越廣泛。螞蟻金服作為金融科技領域的…

ElasticSearch 的工作原理

理解 ElasticSearch 的工作原理需要從索引、搜索、以及其背后的核心機制幾個方面來探討。 1. ElasticSearch 是什么&#xff1f; ElasticSearch 是一個分布式搜索和分析引擎&#xff0c;適用于各種類型的數據&#xff0c;例如文本、數值、地理位置、結構化或非結構化數據。它基…

STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE開發環境(支持JLINK、STLINK、DAPLINK)

導言 Embedded IDE官網:https://em-ide.com/docs/intro 我猜肯定有部分人使用SI Keil開發STM32項目&#xff0c;也有vscode Keil開發STM32程序。SI或vscode編寫代碼&#xff0c;然后切換Keil編譯、下載、調試程序。有一段時間&#xff0c;我也是這么干的。但是&#xff0c;程…

光譜相機的工作原理

光譜相機的工作原理主要基于不同物質對不同波長光的吸收、反射和透射特性存在差異&#xff0c;以下是其具體工作過程&#xff1a; 一、光的收集 目標物體在光源照射下&#xff0c;其表面會對光產生吸收、反射和透射等相互作用。光譜相機的光學系統&#xff08;如透鏡、反射鏡…

ThinkPHP接入PayPal支付

ThinkPHP 5接入PayPal 支付&#xff0c;PayPal的流程是服務器請求Paypal的接口下單&#xff08;需要傳訂單id/支付成功的重定向地址/支付失敗的重定向地址&#xff09;&#xff0c;接會返回一個支付地址&#xff0c;項目服務器把地址返給用戶&#xff0c;用戶打開鏈接登錄Paypa…

stream流的toMap

假設有這么一個類: import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors;public class Student {private int id;private String name;public Student(int id, String name) {this.id id;…

html + css 淘寶網實戰

之前有小伙伴說&#xff0c;淘寶那么牛逼你會寫代碼&#xff0c;能幫我做一個一樣的淘寶網站嗎&#xff0c;好呀&#xff0c;看我接下來如何給你做一個淘寶首頁。hahh,開個玩笑。。。學習而已。 在進行html css編寫之前 先了解下網頁的組成和網頁元素的尺寸吧 1.網頁的組成 …

神經網絡、深度學習、卷積神經網絡

好的&#xff01;我會盡量詳細且易懂地為你解釋這些概念&#xff0c;并在最后用簡單直白的語言總結一下。 1. 神經網絡思想 神經網絡是靈感來自于生物大腦神經元的工作原理&#xff0c;是一種模仿人類大腦處理信息的方式來設計的數學模型。我們的大腦由億萬個神經元組成&…

設計模式01:創建型設計模式之單例、簡單工廠的使用情景及其基礎Demo

一、單例模式 1.情景 連接字符串管理 2.好處 代碼簡潔&#xff1a;可全局訪問連接字符串。性能優化&#xff1a;一個程序一個連接實例&#xff0c;避免反復創建對象&#xff08;連接&#xff09;和銷毀對象&#xff08;連接&#xff09;。線程安全&#xff1a;連接對象不會…

【不太正常的題】LeetCode.232:用棧的函數接口實現隊列

&#x1f381;個人主頁&#xff1a;我們的五年 &#x1f50d;系列專欄&#xff1a;初階數據結構刷題 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 &#x1f697; 1.問題描述&#xff1a; 題目中說了只能使用兩個棧實現隊列&#xff0c;并且只能使用…

Linux搭建text-generation-webui框架,安裝通義千問大模型,開放對外api,voxta測試對話圖文教程

目錄 text-generation-webui部分 開放對外API 通義千問部分 遠程API對話測試部分 text-generation-webui部分 本來不想發這個文章的&#xff0c;但是自己部署的時候看了挺多人的帖子&#xff0c;很多發的不全面&#xff0c;要么就是跟著他們流程走有些小問題啥的&#xff…