查看分支
1 | git branch |
查看某次commit的修改
1 | git show commit号 |
查看某个文件的历史修改记录
1 | git log 文件名 |
查看未commit的本地修改
1 | git diff |
git diff 比较commit之间的差异
1 | git diff commit 比较HEAD与commit之间的差异 |
从服务器拉代码
git pull --rebase (推荐)会把本地未push得commit放到缓冲区,然后把远程最新版本拉过来,再应用本地commit,这样不会造成本地有新commit时,merge的效果。
git pull 直接更新,若本地和远端都有新commit,都执行自动merge。
拉分支
git checkout -b branchName 创建本地新分支
git checkout -b branchName remotes/origin/branchName 以远端分支创建本地新分支
git push origin $newBranch:$newBranch 将本地分支提交到远端进行创建
删除远程分支
1 | $ git push origin :master |
提交修改
git add . 将修改加到stage状态区
git commint -m "注释"
git push 推送所有分支
git push origin develop 只推送develop分支
添加文件
git add -A
删除文件
git rm 文件名
git rm -r 目录名
Push
git push push所有分支
git push origin master 将本地主分支推到远程主分支
git push –u origin master 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin <local_branch> 创建远程分支,origin是远程仓库名。
git push origin <local_branch>:<remote_branch> 创建远程分支
强制push
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。
git push --force origin
合并分支
merge
git merge remotes/origin/mc-s-3 将远端mc-s-3分支merge到本地
rebase
git rebase develop
git rebase remotes/origin/develop
配置mergetool
git config –global merge.tool bc3
git config –global mergetool.bc3.path 软件执行文件地址
merge策略
1 | Git merge 策略的总结: |
回退未commit的修改
git checkout [path] 将指定路径的修改还原到最新版本
回退已commit,未push的修改
git reset HEAD <file>
--mixed 选项:默认的
--soft 选项:改动会回退到stage状态
--hard 选项:改动会直接丢失。
git rebase -i 想要删除的commit的前一个commit号。
出来的界面里,将想要删除的commit描述改为drop,保存即可。
回退已push的修改
git revert 指定的commit号。跳出来的界面,选择要回退的commit内容(取消前面的#)
可以随便选某个commit删除
若revert一个merge的commit,则要指定parent 号
git revert commit 号 -m 1。
这样就选parent 1,那么parent 1又是哪一个呢?一般来说,如果你在master上mergezhc_branch,那么parent 1就是master,parent 2就是zhc_branch.
重排commit顺序
git rebase -i commit号
出来的界面中,将列出来的commit行重新排序再保存,就等于修改commit顺序了。
修改commit的描述
未push
方法一:
git rebase -i commit号
对应commit号前改为edit,保存。出来后git commit --amend。将commit描述修改掉,保存。
出来后再git rebase --continue即可。
方法二:
git commit --amend 修改最近的一次commit
代码仓库迁移
git clone --bare robbin_site robbin_site.git
git remote remove origin
git remote add origin git@120.27.160.167:ZCY/doc-round-1.git
git push –-all -–progress origin
导出指定版本的代码版本
git archive -o ../updated.zip HEAD $(git diff --name-only HEAD^)
例如:git archive -o ./version.zip 指定commit号
或者 git archive --format zip -output "./archive.zip" HEAD
tag功能
创建tag
git tag -a v1.0.0 -m '备注'
查看tag
git tag
切换tag
git checkout tag名
删除tag
git tag -d v1.0.0
指定commit打tag
git tag -a v1.0.0 commit号
发布标签
git push origin v1.0.0 将本地v1.0.0标签推送到git服务器
git push origin -tags 将本地所有tag一次性推送到git服务器
创建补丁
当前分支所有超前master的提交:
git format-patch -M master
某次提交以后的所有patch:
git format-patch 4e16 --4e16指的是commit名
从根到指定提交的所有patch:
git format-patch --root 4e16
某两次提交之间的所有patch:
git format-patch 365a..4e16 -o <patch_dir> --365a和4e16分别对应两次提交的名称
某次提交(含)之前的几次提交:
git format-patch –n 07fe --n指patch数,07fe对应提交的名称
故,单次提交即为:
git format-patch -1 07fe
应用补丁
方法一(推荐)
1 | 1、在同一个仓库下找到对应的commit号 |
查看未push到远程仓库的commit
1、查看到未传送到远程代码库的提交次数
1 | git status //只能看次数 |
2、查看到未传送到远程代码库的提交描述/说明
1 | git cherry -v |
3、查看到未传送到远程代码库的提交详情
1 | git log master ^origin/master |
查看两个分支的差异
查看dev中有,而master中没有的
1 | git log dev ^master |
查看dev中比master多了哪些提交(A比B多了哪些,就把A放..右边)
1 | git log master..dev |
不在乎谁多谁少,只想看差异的提交
1 | git log --left-right dev...master #--left-right 会帮助显示差异的commit属于哪个分支 |
整个目录比较差异详情
1 | git difftool develop..pre-online --dir |
Git stash 暂存
1 | git stash |
删除本地git branch -a 能看到,而远程已经删掉的分支记录
1 | git fetch -p |
更改时间显示方式
1 | --date=(relative|local|default|iso|rfc|short|raw) |
全局更改方式
1 | git config --global log.date relative |
代码量
统计当天提交的代码量
1 | git log --author="$(git config --get user.name)" --no-merges --since=1am --stat |
统计报告-gitstats
- 用GitStatX图形化工具查看
统计报告-gitinspector
1 | gitinspector --format=html --since=2018-01-01 --until=2018-12-30 --timeline --localize-output -w ./ > ~/tmp/gitinspector/zcy-payment-center-201801.html |
gitinspector命令说明
1 | ➜ car-manage git:(master) gitinspector --help |