学而时习之,不亦说乎
Ubuntu安装
sudo apt-get install git
配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
创建仓库(初始化)
在当前指定目录下创建
git init
指定目录新建一个仓库
git init [project-name]
添加文件到缓存区
# 添加所有
git add .
# 添加指定文件
git add xx/xx/xx
提交
# 提交暂存区到仓库区
git commit -m "描述(方便日后查看回忆此次提交内容)"
# 提交时显示所有diff信息
git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m [message]
分支
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git checkout <name>
- 创建+切换分支:
git checkout -b <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
创建分支并且换到分支
git checkout -b xxx
命令来查看所有的分支
git branch -a
切换分支
git checkout xxx
合并分支
# 把dev分支的工作成果合并到master分支上
git merge dev
删除分支
git branch -d xxx
删除远程分支
git push origin --delete xxx
查看
显示有变更的文件
git status
显示当前分支的版本历史
git log
显示commit历史,以及每次commit发生变更的文件
git log --stat
搜索提交历史,根据关键词
git log -S [keyword]
显示所有提交过的用户,按提交次数排序
git shortlog -sn
显示指定文件是什么人在什么时间修改过
git blame [file]
显示暂存区和工作区的差异
git diff
显示暂存区和上一个commit的差异
git diff --cached [file]
显示工作区与当前分支最新commit之间的差异
git diff HEAD
显示两次提交之间的差异
git diff [first-branch]...[second-branch]
显示今天你写了多少行代码
git diff --shortstat "@{0 day ago}"
显示某次提交的元数据和内容变化
git show [commit]
显示某次提交发生变化的文件
git show --name-only [commit]
显示某次提交时,某个文件的内容
git show [commit]:[filename]
显示当前分支的最近几次提交
git reflog
远程
列出已经存在的远程分支
git remote
列出详细信息,
在每一个名字后面列出其远程url,此时, -v 选项(译注:此为 –verbose 的简写,取首字母),显示对应的克隆地址。
git remote -v | --verbose
添加一个远程仓库
git remote add [shortname] [url]
git remote add dev git://github.com/CnPeng/test.git ,这样,就可以用字符串 dev 来代指该仓库地址。在使用 git remote -v 查看仓库列表的时候,就会有一个 dev 的仓库列表。
查看远程仓库信息
git remote show [shortname]
重命名远程仓库
git remote rename [old-name] [new-name]
删除远程仓库(解除与远程仓库的关系)
git remote rm [shortname]
推送
上传本地指定分支到远程仓库
git push [remote] [branch]
强行推送当前分支到远程仓库,即使有冲突
git push [remote] --force
推送所有分支到远程仓库
git push [remote] --all
拉取
git pull 取回远程主机某个分支的更新,再与本地的指定分支合并
git pull <远程主机名> <远程分支名>:<本地分支名>
# 取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
git pull origin next:master
# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin next
# 上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。
git fetch origin
git merge origin/next
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
手动建立追踪关系。
# 指定master分支追踪origin/next分支。
git branch --set-upstream master origin/next
# 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名
git pull origin
暂存
- 将当前分支存起来
git stash
- 查看我们“存储”的列表
git stash list
- 恢复现场
# 恢复后,stash内容并不删除
git stash apply
# 删除
git stash drop
# 恢复的同时把 stash 存储列表的内容也删了
git stash pop
如果有一个分支上多个 stash,如果需要恢复指定的 stash ,可以在命令尾部加id,如
$ git stash apply stash@ {0}
,同样删除指定 stash 项目则执行如$ git stash drop stash@{1}
标签
列出标签
git tag
创建标签
- 附注标签
git tag -a v1.4 -m "my version 1.4"
git show
- 轻量标签
git tag v1.4-lw
- 后期打标签
git reflog
git tag -a v1.2 9fceb02
- 共享标签
默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库
# 推送一个标签
git push origin v1.5
# 推送所有本地新增的标签上去(检出标签)
git push origin --tags
跳转到指定标签
git checkout v0.0.1
删除标签
# 删除本地指定标签
git tag -d v0.0.1
# 删除远程标签
git push origin -d tag <tagname>
其他
# 中文乱码
git config --global core.quotepath false
相关参考:
https://git.apachecn.org/
https://www.liaoxuefeng.com/wiki/896043488029600