tips:<*> means required,[*] means optional

基本操作

创建仓库

git init

添加文件

git add <filename>

提交更改

git commit -m '<message>'

查看状态

git status

查看修改内容

git diff

查看日志

git log

回退到目标版本

注:

  • HEAD^为上一个版本,HEAD^^为上上个版本,依此类推
  • commit id类似3628164
git reset --hard <version>

撤销更改

  • 缓存区
git reset HEAD <filename>
  • 文件
git checkout -- <filename>

删除文件

git rm <filename>

远程仓库

添加远程仓库

git remote add origin <*.git>

推送到远程仓库

git push [-u] origin <repository-name>

克隆仓库

git clone <*.git>

分支

创建分支

git branch <branch-name>

切换分支

git checkout <branch-name>

合并某分支到当前分支

git checkout -b <branch-name>

创建+切换分支

git checkout -b <branch-name>

查看分支

git branch -a

删除分支

git branch -d <branch-name>

强行删除未合并分支

git branch -D <branch-name>

创建远程分支到本地

git checkout -b <branch-name> origin/<branch-name>

删除远程分支

git branch -r -d origin/<branch-name>
git push origin :<branch-name>

建立本地分支和远程分支的关联

git branch --set-upstream <branch-name> origin/<branch-name>

临时储存工作进度

储存

git stash

查看

git stash list

恢复

git stash apply [stash@{*}]

删除

git stash drop [stash@{*}]

恢复并删除

git stash pop [stash@{*}]

标签

创建标签

git tab <tag-name> [-m 'comment'] [commit-id]
 #eg.
git tag v0.9 6224937

删除标签

git tag -d <tag-name>

推送标签

git push origin <tag-name>

删除远程标签

先删除本地,然后再

git push origin :refs/tags/<tag-name>

忽略文件

创建:.gitignore,在里面写入过滤规则

*.class
test/

强行添加忽略的文件

git add -f <filename>

被忽略的文件的忽略规则

git check-ignore -v <filename>

自定义命令

(个人认为可以理解为C语言中的宏定义)

git config --global alias.<abbr> 'command'
 #e.g.
git config --global alias.fuck 'push origin'
git config --global alias.logd "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

不小心push了密码到github上

没错,简直蠢哭了

BFG Repo-Cleaner 用法:

java -jar bfg.jar --replace-text replacements.txt my-repo.git

replacements.txt 这样写:

test@qq.com==>[email protected]

廖雪峰的原文看这里

git rebase