http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374027586935cf69c53637d8458c9aec27dd546a6cd6000
1.git与svn的区别就是git相当于svn服务端和客户端的集合,github这种服务就相当于很多个svn的server端互相同步,对于没有权限控制的git来说,更适合开源程序的开发。而svn等则适合公司内部商业软件的开发,毕竟权限这一条就足够让公司选择svn等集中式的版本控制系统了。
2.
3.常用名称
仓库(Respository)
仓库用来存放项目代码,每个项目对应一个仓库,多个开源项目则有多个仓库
star(收藏)
收藏项目到仓库,方便下次查看
fork(复制克隆项目)
完整复制别人的仓库到自己的仓库下,并且独立存在
pull request(发起请求给指定用户)
1.fork项目
2.修改自己仓库的项目代码
3.新建pull request
4.等到作者合并或者修改
Watch(关注) 可以查看对方的动态
Issue(事务卡片) 新问题大家一起讨论使用
4.qq邮箱需要设置白名单才能收到邮件
5.创建仓库后的主页:
6.git是免费的、版本管理软件
7.git 仓库:最终确定文件保存到仓库,成为一个新的版本,并且对他人可见
暂存区:暂存已经修改的文件最后统一提交到git仓库中
工作区:添加、编辑、修改文件等操作
git status : 查看文件的当前状态
git add aa.java : 将文件从工作区添加到暂存区
git commit -m "提交描述": 将文件从暂存区提交到git 仓库
配置git用户信息:
1.设置用户名:
git config --global user.name "
linzhixian
"
2.设置用邮箱
git config --global user.name "
linzhixian@rk.com
"
3.查看设置
git config --list
8.初始化git仓库:
git init 会生成 .git 隐藏文件
9.提交文件
touch aa.java 或者vim aa.java
git add aa.java //将文件添加到暂存区
git commit -m "add file aa.java" //将文件添加到git 仓库
git status //查看当前工作区的提交情况
10.删除文件
rm .\test.java
git rm test.java
git commit -m "delete"
11.从git hub下载文件本机:
向服务端提交文件:
git push //有配置name和邮箱可以直接用
12.远程提交失败时可以使用
origin https://
linzhixian@rk.com:yy6894713@github.com
/linzx2015/linzxGitRepository.git (push)
git 解释:
2.1bisect Find by binary search the change that introduced a bug 相当于二分查找
例子:
grep
1013
file
.txt 得到一串文字,但是不够
$ git bisect start 在使用start之后,没有找到想要的结果(没有任何输出)
$ git bisect bad 标记为坏点
$ git bisect good 7c0dcfa 标记为好值,并作提交 (效果等于右边)
git bisect start master 7c0dcfa
2.2clone Clone a repository into a new directory
复制项目的两种方式:
如复制ota android项目:git clone ssh://git@10.10.10.29/rk/platform/packages/apps/RKUpdateService -b rk29/mid/4.0.1_r1/develop( 或rkplatform_4.1)
也可以通过http 协议来访问:
git clone http://www.kernel.org/pub/scm/git/git.git
2.3fetch Download objects and refs from another repository
git fetch
:相当于是从远程获取最新版本到本地,
不会自动merge
git fetch origin master(从分支获取最新的代码)
2.4 pull Fetch from and integrate with another repository or a local branch
git pull origin master
从远程获取最新版本
并merge
到本地
2.5init Create an empty Git repository or reinitialize an existing one
如果在GitHub项目初始化之前,数据已经存在于本地版本库中,用
mkdir project_dir
cd project_dir
git init
2.6 merge Join two or more development histories together
当前分支为master,合并sofia分支,方法1,方法2均可
1.git checkout master
git merge sofia(如果没有冲突,直接merge完成;冲突就会有提示对应文件出错)。
2.git branch watch(watch为分支名)
git checkout watch
git checkout -b watch master(将watch和master进行合并)
2.7 mv Move or rename a file, a directory, or a symlink
git mv aa.txt TEST 将aa.txt文件移动到TEST
相当于
mv aa.txt TEST
git rm aa.txt
git add TEST
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提
使用git rm aa.java 然后git status
查看
当前状态,再git comit
push Update remote refs along with associated objects rebase Forward-port local commits to the updated upstream head reset Reset current HEAD to the specified state rm Remove files from the working tree and from the index show Show various types of objects status Show the working tree status tag Create, list, delete or verify a tag object signed with GPG
2.没有安装git时用sudo git-apt install git 旧版git仓库:sudo git-apt install git -core,
非Ubuntu下的linux版本安装git:
先从Git官网下载源码,然后解压,依次输入:
./config
,
make
,
sudo make install
这几个命令安装即可。
3.建立自己的版本库(repository):
$ mkdir learngit //创建目录用于作为自己的项目仓库
$ cd learngit
$ pwd //显示当前目录,我的为/data2/lzx
$git init //初始化自己的版本库,正式完成版本库创建,在目录会出现一个 .git目录,但是隐藏的,可以通过
ls -ah显示
4.提交自己的文件到版本库:
$vi read.java //添加自己要添加的内容
$git add read.java //添加文件到仓库,实际上是将文件存到暂存区
$git commit -m "lzx:commit read.java" //提交文件到仓库,字符串为说明的具体内容,可能会add多个文件,然后一次性提交。
$git status //查看仓库当前的状态,这段时间提交了什么内容
$git diff . //查看当前内容的有哪些新的修改,git diff read.java 查看read.java文件近期有哪些修改
5.版本控制:
$git log //查看旧版提交的历史记录,简略显示提交内容,git log
--pretty=oneline 单行显示提交记录
$git reset --hard
HEAD^ //HEAD对应的版本号,可以根据版本号,退回之前版本,也可以返回最新版本
lzx@ubuntu:~/pinwang-sofiaGms/cts/vendor/intel$ git reset --hard HEAD^2(第3个)
git reset --hard HEAD 回退到当前点
git reset --hard HEAD 回退到上一个点
$cat read.java // 显示当前文件版本
$git reflog //查看未来执行的命令,被修改掉,想反悔的
6.暂存区:
1.add内容到暂存区:
2.$
git
commit -m "understand how stage works" //将文件提交
3.提交后文件的状态
4.对文件read.java而言,第一次修改->git add->第二次修改->git commit,仓库只负责将第一次修改的add提交到仓库。第二次修改没有提交。
7.撤销修改:
$git checkout --read.java //checkout单个文件, git checkout . 将当前目录的修改checkout
&git add read.java //提交文件到暂存区,这时需要git reset
HEAD read.java 来将单个文件恢复到之前状态。HEAD代表最新的版本
8.删除文件:
$rm read.java //直接删除文件
$git rm read.java //使用git完成删除
$git commit -m "lzx:delete read.java" //提交修改的内容说明
9.远程仓库:
1.在winscp上登陆,准备好自己的帐号(最好跟公司邮箱帐号相同),然后在winsct上输入openssl passwd生成你的加密密码,向黄涛申请。
2.申请完后,在帐号kaka下的.ssh目录中找到id_rsa.pub文件,打开复制公钥(全部),
$
ssh-keygen -t rsa -
C
"youremail@example.com" //创建SSH Key,
在
用户主目录里找到
.ssh
目录,里面有
id_rsa
和
id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,
id_rsa
是私钥,不能泄露出去,
id_rsa.pub
是公钥。
3.登陆https://10.10.10.19网站,输入向黄涛申请好的帐号,然后配置preference下的full name和公司邮箱,将公钥复制到对应的public key下
4.以配置好的帐号登陆,从服务器上下载最新的代码。
10.添加远程仓库
1.根据GitHub的提示,在本地的
learngit
仓库下运行命令:
$ git remote add origin git@github.com:lzx/learngit.git //蓝色字体要改成自己的
2.
git push -u origin lzx
//将本
地服务器lzx内容推送到远程服务
3.
$
git clone git
@github
.
com:
michaelliao/gitskills.git //克隆一个本地库,然后进入自己的目录看是否有read.md文件
11.
git checkout -b dev 创建dev分支,然后切换到dev分支,
相当于git branch dev git checkout dev
查看分支:
创建分支:
git branch
git branch <name> //切换分支,当出现什么问题都解决不了的时候,可以考虑切换分支,回到最开始的点
git
切换分支:
git checkout <name>
创建+切换分支:
git checkout -b <name>
合并某分支到当前分支:
git merge <name> //git merge --no-ff -m "beizhu" hebingneirong
lzx@ubuntu:~/pinwang-sofiaGms/cts/build$ git merge --no-ff android-cts-5.1_r2
GNU nano 2.2.6 File: /data2/lzx/pinwang-sofiaGms/cts/build/.git/MERGE_MSG
git branch -d <name>
12.git merge aa 将aa分支合并到当前分支
git branch -d aa 将aa分支删除掉
git log --graph --pretty=oneline --abbrev-commit 查看分支情况
git stash 保存当前工作现场 git stash list 显示保存区有哪些文件
13.
git stash apply
恢复文件等,stash内容并不删除,用
git stash drop
来删除stash文件的内容。
git stash pop //恢复同时删除内容
14.
$
git stash apply stash@{
0
} //恢复指定的stash
git remote
查看远程库的信息 git remote -v 显示详细的信息
git push
origin
master
把本地分支提交到远程仓库,origin为远程仓库,master为本地仓库
15.
git tag v1.
0 //打上标签,类似备注
git tag v
0
.
9
6224937 //6224937为对应的日志号,对该日志加标签
git push origin <tagname>
可以推送一个本地标签;
git push origin --tags
可以推送全部未推送过的本地标签;
git tag -d <tagname>
可以删除一个本地标签;
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
16.从具体地址克隆项目:
git clone
git@github.com:michaelliao/bootstrap.git(具体地址)
git config --global color.ui
true 修改文件颜色
git revert HEAD 撤销前一次 commit
* git revert HEAD^ 撤销前前一次 commit
* git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
* git revert HEAD^ 撤销前前一次 commit
* git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。