##基本命令
git clean -f
删除未被跟踪的文件
git clean -df
删除未被跟踪的文件和文件夹
###差异对比
git log -p
命令来显示每一次提交与其父节点提交内容之间快照的差异
git log -p ./src/filepath/a.c
命令来显示指定文件每一次提交与其父节点提交内容之间快照的差异
git diff
查看工作目录中某个还未载入(stage)的文件的差异
git diff --stage
查看载入(staged)而并未提交(not committed)的内容差异
git diff HEAD
查看最后一次提交之后工作目录中文件的变更
git diff v1.6.0 -- README
查看创建v1.6这个标签之后README文件所发生的修改
git diff v1.0 v1.1
两个版本之间比对
git diff --stat v1.6.1.1 v1.6.1.2
显示所有文件统计差异
git diff --stat v1.6.1.1 v1.6.1.2 ./src/filepath/a.c
显示指定文件统计差异
git diff v1.6.1.1 v1.6.1.2
显示所有文件详细差异
git diff v1.6.1.1 v1.6.1.2 ./src/filepath/a.c
显示指定文件详细差异
###查看变更历史
git log
查看所有文件变更历史
git log ./src/filepath/a.c
查看对指定文件的变更历史
###还原代码
git revert HEAD
撤销前一次 commit
git revert HEAD^
撤销前前一次 commit
git revert commit_id
撤销指定的版本,撤销也会作为一次提交进行保存
git push origin master
将还原更改提交到远程分支上
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,
版本会递增,不影响之前提交的内容
##远程分支
###远程分支查看
git remote -v
查看远程分支
###添加远程分支
git remote add origin https://gitee.com/lvxinliang/CPPTest.git
###推送本地分支到远程分支并设置分支上游
git push -u origin master
初次提交本地分支,将本地的master分支推送到origin主机,同时设置 master 的 git pull/status 的上游,后面就可以不加任何参数使用git push
git push --set-upstream origin master
效果同上,上面是缩写
###推送本地分支到远程分支
git push origin master
将本地分支推送到远程的同名分支上
拉取远程分支并创建本地分支
git checkout -b dev origin/dev
在本地新建dev,并自动切换到该本地分支且设置分支上游
删除远程分支
git push origin --delete dev_br
删除远程tag
git push origin :refs/tags/remote_tag
##Tag操作
###创建Tag
git tag v1.0
当前分支创建一个名为v1.0的tag
###列出所有Tag
git tag
###删除Tag
git tag -d v0.1
###推送本地Tag到远程
git push origin v1.0
###一次性推送全部尚未推送到远程的本地标签
git push origin --tags
###删除远程Tag
git tag -d v0.9
要删除远程标签就麻烦一点,先从本地删除
git push origin :refs/tags/v0.9
然后,从远程删除。删除命令也是push
##代码合并
###合并单个commit
git cherry-pick 6bbf6b4 #6bbf6b4为dev01上的commitId
将dev01上功能A对应代码cherry-pick到dev02上
##常用配置
[alias]
co = checkout
ci = commit
br = branch
st = status
last = log -1
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
lga = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %C(bold blue)%s%Creset %Cgreen(%cr) <%an>%Creset' --abbrev-commit --date=relative --author lvxinliang
d = difftool
[diff]
tool = vimdiff
[core]
pager = less -F -X
[difftool]
prompt = false
[user]
email = user@163.com
name = user
[color]
ui = auto
[push]
default = simple
##差别
###git revert 和 git reset的区别
- git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
- 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
- git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
##Refs:
Git push与pull的默认行为