«

Git常用命令总结(缩减GitHub仓库大小,优化git仓库,彻底清除垃圾文件)

时间:2024-2-18 09:35     作者:韩俊     分类: Linux


1.初始化

git init #初始化仓库,新建一个Git仓库(新建了一个隐藏目录.git)

把远程仓库克隆到本地

git clone https://github.com/010test/phpcrontab.git #将在当前目录下创建phpcrontab目录
git clone https://github.com/010test/phpcrontab.git /home/yhm/test #将代码克隆到/home/yhm/test目录内

列出项目所有配置

git config --list

列出远程仓库别名

git remote

列出远程仓库别名对应的实际url

git remote -v

添加或关联一个新远程仓库

git remote add [alias] [url]

删除远程仓库别名

git remote rm [alias]

重命名远程仓库别名

git remote rename [old-alias] [new-alias]

更改远程仓库url,可以加上—push和fetch参数,为同一个别名set不同地址

git remote set-url [alias] [url]

2.常用

git status
git add .
git commit -m "注释..."
git push -u origin master
git fetch origin master
git pull origin master

git pull = git fetch + git merge

特殊符号:

~<n>相当于连续的<n>个^

^代表父提交,当一个提交有多个父提交时,可以通过在^后面跟上一个数字,表示第几个父提交 ^相当于^1

3.日志/回滚重置

git log filename #列出指定文件的log列表
git log --oneline --graph #图形化显示分支合并历史
git log branchname #查看指定分支的log列表
git log --decorate #列出某个提交在哪个分支上
git log --author=[author name] 指定作者的提交历史.
git log --since --before --until --after  根据提交时间筛选
git log --grep 根据commit信息过滤
git log --stat #列出每次改动的文件列表
git show commitID #查看某个提交的改动详情

4.代码恢复(回退)

git checkout -- . #将工作区的所有改动清掉
git checkout -- filename #将工作区的指定文件的改动清掉
git revert commitID #删除(恢复)某次提交
git reset --hard commitID #将本地的代码回退到某个提交

git reflog

    reflog记录分支变化或者HEAD引用变化, 当git reflog不指定引用时, 默认列出HEAD的reflog,
    HEAD@{0}代表HEAD当前的值, HEAD@{3}代表HEAD在3次变化之前的值,
    git会将变化记录到HEAD对应的reflog文件中, 其路径为.git/logs/HEAD, 分支reflog文件都放在.git/logs/refs的子目录

git diff

    不加参数: show diff of unstaged changes.

    git diff --cached 命令
        已经暂存的文件和上次提交之间的差异
        
    git diff HEAD
        show diff of all staged or unstated changes.

git分为三个区域: 

    1.工作区(working directry)
    2.暂缓区(stage index)   
    3.历史记录区(history)
    
git reset --mixed id  history变了(提交记录变了),但staged 和 working没变  (默认方式)
git reset --soft id   history变了(提交记录变了)和staged区都变了,但working没变
git reset --hard id   全都变了

变化范围:

soft (history) < mixed (history + stage) < hard (history + stage + working)

4.分支

git branch -v  列出本地所有分支的最后一次提交
git branch     列出本地所有分支,当前分支会被星号标示出 
git branch newBranchName        基于当前分支创建新分支
git branch -D branchName        删除分支 
git checkout branchName         切换分支
git checkout -b newBranchName   创建并切换分支
git rebase master               把master分支更新到当前分支
git merge branchName            分支合并

git push [remote-name] :branch-name 删除远程分支

5.优化git仓库,彻底清除垃圾文件,缩减git仓库

例如, 我的jekyll博客代码库提交了大量mp3文件, 使用下面命令清除后代码库由233M缩小为1.3M, 提交到GitHub部署博客轻快飞速
# 清除垃圾文件(大量无用的mp3文件)

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.mp3' --prune-empty --tag-name-filter cat -- --all

# 提交到远程仓库(如GitHub, 我再次从git clone GitHub代码库会变小为1.3M)

git push origin --force --all

# 必须回收垃圾,本地仓库才变小

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin    
git reflog expire --expire=now --all
git gc --prune=now

rm -rf .git/refs/original
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

标签: linux

热门推荐