git常用、实用操作:
(1)对比两次修改改了哪些文件。
$ git diff --stat aa30fba0676f5e5f7bc254240b28887916596eb3 7e68d94b28a15e7b4ccce6a63ac256105e36c495
vendor/rockchip/chinaone/AndroidBoard.mk | 21 ++++++++----------- vendor/rockchip/chinaone/apk/Explorer_v2.2.apk | Bin 0 -> 375562 bytes vendor/rockchip/chinaone/apk/Welcome.apk | Bin 1144642 -> 0 bytes vendor/rockchip/chinaone/apk/astro.2.5.2_minde.apk | Bin 2055219 -> 0 bytes vendor/rockchip/chinaone/apk/com.qo.android.am.apk | Bin 427623 -> 0 bytes vendor/rockchip/chinaone/products/chinaone.mk | 2 +
6 files changed, 11 insertions(+), 12 deletions(-)root@luoqi-desktop:~/work/luoqi/yourAndroid/android#
(2)恢复某个文件夹或者文件
$ git checkout 文件夹 文件
(3)取消git add的文件或者文件夹
$ git reset HEAD 文件名1 文件名2 。。。
(4)恢復 Commit,重新提交 Commit,修改数据并不会丢失。
$ git reset --soft HEAD^
(5)可以git log --stat能够方便的查看提交日记。
(6)查看没有提交的某个文件修改了什么
$ git diff 文件名1 文件名2 。。。
(7)恢复所有文件到初始状态
$git checkout -f
(8)显示最后一次 commit 修改的内容:
$ git show
(9)销毁所有stash了的未提交改动
$ git stash clear
(10)如果某次git push出现了错误。可以取消服务器上的该提交点,但是如果出现冲突,需要手动解决。
git revert bfd142f5cc9bd3211e22e8d5b7ceebc68374a4a5
git push
(11)git reset --hard eb22ee48249670dd1b2fbb7159ce95c4e9c78da4彻底回退到某个版本,本地的源码也会变为上一个版本的内容。
(12)一些简单的配置:
$ git-config user.name "Jike Song"
$ git-config user.email albcamus@gmail.com
(13)gitk图形界面先apt-get install gitk,然后到根目录下面输入gitk如果输入gitk origin/develop可以看远端分支
(14)删除远端分支(提交一个空分支上去)
$: git push origin :p4popt
To git@search.ued.taobao.net:projects/search.git
- [deleted] p4popt
比如删除origin/new分支:
git push luoqi@10.10.10.201:/home/rockchip/china_one/cj_5_kernel.git :new
(15)撤销最近一次修改:
$ git reset --soft HEAD~1
执行前:
commit f02aafef0ff9e69d503be84835aa86714e725b44
Author: luoqiDate: Wed Apr 16 15:41:13 2014 +0800
test2
commit c28ad6a7a37ad224b0fbcaa341392d6b0b109d66
Author: luoqi
Date: Wed Apr 16 15:40:43 2014 +0800 test1
执行后:
commit c28ad6a7a37ad224b0fbcaa341392d6b0b109d66
Author: luoqi
Date: Wed Apr 16 15:40:43 2014 +0800 test1
(16)只删除中间的一个commit对应的修改,其他不变 git revert <对应的哈希值>
创建本地tag:
git tag
或者
git tag -a-m “0.1.2版本”
删除本地tag:
git tag -d
推送tag到远程服务器:
git push origin
删除远程tag:
git push origin --delete tag
我们常用 -p 选项 展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:
$ git log -p -2
此外,还许多摘要项可以用,比如 --stat,仅简要的显示 文件 增改行数统计,每个提交都列出了修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行数小计。
$ git log --stat
--author 仅显示指定作者相关的提交。
##########
tg summary --graphviz | dot -T png -o topgit.png
生成树形图片
git使用技巧:
git tag -l -n 显示所有tag
git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id
【本地代码库回滚】:
git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除
git reset --hard HEAD~3:将最近3次的提交回滚
【远程代码库回滚】:
这个是重点要说的内容,过程比本地回滚要复杂
应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
操作步骤:
1、git checkout the_branch
2、git pull
3、git branch the_branch_backup //备份一下这个分支当前的情况
4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id
5、git push origin :the_branch //删除远程 the_branch
6、git push origin the_branch //用回滚后的本地分支重新建立远程分支
7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
如果使用了gerrit做远程代码中心库和code review平台,需要确保操作git的用户具备分支的push权限,并且选择了 Force Push选项(在push权限设置里有这个选项)
另外,gerrit中心库是个bare库,将HEAD默认指向了master,因此master分支是不能进行删除操作的,最好不要选择删除master分支的策略,换用其他分支。如果一定要这样做,可以考虑到gerrit服务器上修改HEAD指针。。。不建议这样搞
8、解决.gitignore无法忽略的文件以及自身被忽略的方法
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更改情况。
git update-index --assume-unchanged PATH/FILE
在PATH/FILE处输入要忽略的文件。
然后在.gitignore文件里添加要忽略的文件或文件夹就行了
需要还原回来则:
git update-index --no-assume-unchanged PATH/FILE
###################
初始化git库:
Git global setup
git config --global user.name "yourUserName"
git config --global user.email "yourEmail"
Create a new repository
git clone git@xxx.com:luoqi/sdk.git
cd {projectDir}
touch README.md
git add README.md
git commit -m "add readme"
git push -u origin master
Existing folder or Git repository
cd {projectDir}
git init
git remote add origin git@xxx.com:luoqi/sdk.git
git add .
git commit
-am "init"
git push -u origin master