ssh-keygen
1 2 3 4
| ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
cat ~/.ssh/id_rsa.pub
|
配置 - config
1 2 3 4 5
| git config -l
git config --global user.name "your_name" git config --global user.email "your_email@example.com"
|
别名 - alias
1 2 3 4 5 6 7
| git config --global alias.st status
git config --global alias.ck checkout
git config --global alias.cm commit
git config --global alias.br branch
|
克隆 - clone
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| git clone <url>
git clone <url> --depth=1
git clone -b dev <url>
git clone --recursive <url>
git fetch --unshallow
|
初始化 - initial
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| git init
git add <filename>
git add .
git commit -m 'commit msg'
git commit -v
git status
|
远程 - remote
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| git remote add origin <url>
git remote -v
git checkout -b branch-name origin/branch-name
git fetch origin master
git pull git pull origin remove_branch:local_branch
|
推送 - push
1 2 3 4 5 6 7 8 9 10 11
| git push
git push -f
git push -u origin/remote_branch
git push origin local_branch:remote_branch
|
推送到远程分支
git push origin branch-name
,如果推送失败,先用 git pull
拉取并合并
如果合并有冲突,则解决冲突,并在本地提交
没有冲突或者解决掉冲突后,再用 git push origin branch-name
推送就能成功!
如果 git pull
提示 “no tracking information” , 则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream branch-name origin/branch-name
日志 - log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| git log
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git shortlog -sn
git log --graph
git log --pretty=oneline
|
比较 - diff
1 2 3 4 5 6 7 8 9 10 11 12
| git diff
git diff ./filename
git diff d68a1ef2
git log ./filename git show d68a1ef2 ./filename
|
分支 - branch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| git branch -a
git branch
git branch -r
git branch <name>
git branch --orphan
git checkout <name>
git checkout -
git branch -m <name>
git checkout -b <name>
git merge <name>
git merge <name> <target>
git branch -d <name>
git branch -D <name>
git branch -d -r origin/<name> git push origin :<name>
|
标签 - tag
标签就像是版本库的快照,实质上它就是指向某个 commit 的指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| git tag <tag_name> git tag <tag_name> <commit_id>
git tag
git ls-remote --tags origin
git show <tag_name>
git tag -a <tag_name> -m 'msg'
git tag -s <tag_name> -m 'msg'
git push origin <tag_name>
git push origin --tags
git tag -d <tag_name>
git push origin --delete <tag_name>
git push --follow-tags
|
回滚 - reset
1 2 3 4 5 6 7 8 9
| git reset --hard HEAD^
git reset --hard e6d8ce4
git reflog
|
恢复 - checkout
1 2 3 4 5 6 7 8
| git checkout -- .
git reset HEAD ./filename
git checkout -- ./filename
|
暂存 - stash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| git stash
git stash list
git stash apply
git stash drop
git stash pop
git stash apply stash@{0}
|
忽略 - ignore
1 2 3 4 5 6 7 8
| git add -f <name>
git check-ignore
git check-ignore -v node_modules .gitignore:40:node_modules/ node_modules
|
删除 - remove
子模块 - submodule
子模块的操作默认都是 master 分支
1 2
| git config -f .gitmodules submodule.<submodule name>.branch dev git submodule update --remote
|
.gitmodules
加了 -f
参数,修改提交后对所有用户有效
添加子模块
1
| git submodule add <git repo> themes/next
|
添加子模块之后运行 git status
, 可以看到目录有增加一个文件 .gitmodules
,用来保存子模块的信息
1 2 3 4 5 6 7 8 9 10
| $ git status On branch master
Initial commit
Changes to be committed: (use "git rm --cached <file>..." to unstage)
new file: .gitmodules new file: theme/next
|
查看子模块
1 2
| $ git submodule c2f33fc76b500770e266c1c16f028807967cd121 themes/next (v7.1.1-4-gc2f33fc)
|
更新子模块
更新子模块到最新版本
更新子模块为远程仓库的最新版本
1
| git submodule update --remote
|
克隆项目及子模块
先克隆仓库,再更新子模块
1 2 3 4 5 6 7 8 9 10
| $ git clone https://github.com/xg4/blog
$ git submodule
-c2f33fc76b500770e266c1c16f028807967cd121
$ git submodule init
$ git submodule update
|
递归克隆整个项目
1
| git clone https://github.com/xg4/blog --recursive
|
修改子模块
在子模块中修改文件后,直接提交到远程仓库
1 2 3
| git add . git commit -m 'update' git push origin HEAD:master
|
删除子模块
删除子模块文件夹
1 2 3
| $ git rm --cached theme/next
$ rm -rf theme/next
|
删除 .gitmodules
文件中相关子模块信息
1 2 3
| [submodule "themes/next"] path = themes/next url = https://github.com/theme-next/hexo-theme-next
|
删除 .git/config
中的相关子模块信息
1 2 3
| [submodule "themes/next"] active = true url = https://github.com/theme-next/hexo-theme-next
|
删除 .git
文件夹中的相关子模块文件
1
| rm -rf .git/modules/theme/next
|