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