Git 是分布式的代码管理工具,远程的代码管理基于SSH的,配置SSH的步骤如下:
一、设置Git的user name和email:
$ git config --global user.name "xxx"
$ git config --global user.email "aaa.bbb@xxx.com"
二、生成SSH密钥过程:
1、查看是否已经有了ssh密钥:
$ cd ~/.ssh
$ ls
2、生成密钥:
$ ssh-keygen -t rsa -C "aaa.bbb@xxx.com"
按三个回车,密码为空。
Your identification has been saved in /home/tekkub/.ssh/id_rsa.
Your public key has been saved in /home/tekkub/.ssh/id_rsa.pub.
The key fingerprint is: ...........
最后得到了两个文件:id_rsa和id_rsa.pub
3、添加密钥到ssh:
ssh-add 文件名,需要之前输入的密码。
ssh-add id_rsa
4、在git上添加密钥,需要添加到git上的是id_rsa.pub,此时登录账号,即可clone,pull,push代码了。
Git的简单使用
1、设置别名
设置别名可以是git命令变得简单一些,个人习惯常用的别名如下:
$ git config --global alias.cm commit
$ git config --global alias.st status
$ git config --global alias.ck checkout
$ git config --global alias.br branch
2、git add
git add指令分为git add -A ,git add -u,git add .和git add <fileName>
- git add . : 他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件(git v1.0)。
- git add -u : 他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
- 是上面两个功能的合集(git add --all的缩写)
- git add <fileName> : 添加某个指定文件到缓存区。
在 git 2.0版本之后,git add . 和 git add -A 是一样的效果。
3、git commit -m "xxxxxx"
此命令用于给提交添加注释,使用git log指令即可查看每次commit的注释了。
4、git pull 和 git push
- git pull origin <branch>: 相当于git fetch + git merge,拉取远程分支并merge。
- git pull --rebase : 相当于git fetch + git rebase,拉取远程分支并进行rebase操作。
- git push origin <branch>:将本地缓存推送到远程分支。
5、git merge 和 git rebase 的区别
举个例子:
A和B两个人进行合作开发,同时在develop分支上开启各自的功能分支featureA和featureB进行开发,A在10:00提交了A1,12:00提交了A2,16:00提交了A3,并且合并到develop分支,此时develop分支状态为:
Head -> A1 -> A2 -> A3
而B则分别在9:00提交了B1,在11:00提交了B2,在17:00提交了B3,此时对于B来说,合并到develop分支有两种方式,使用rebase和merge。
// 根据提交的先后顺序进行排序
merge : Head -> B1 -> A1 -> B2 -> A2 -> A3 -> B3
// 根据提交的先后进行排序
rebase: Head -> A1 -> A2 -> A3 -> B1 -> B2 -> B3
6、git branch
列出本地已经存在的分支,并且在当前分支的前面加“*”号标记。
git branch -r
: 列出远程分支
git branch -a
: 列出本地分支和远程分支
git branch <name>
: 创建一个新的本地分支
git branch -m oldbranch newbranch
: 重命名分支
git branch -d branchname
: 删除本地分支
git push origin --delete branchname
:删除远程分支
7、git remote
列出已经存在的远程分支
git remote -v
: 列出详细信息,在每一个名字后面列出其远程url
origin git@172.17.0.18:iOS/ttgenwomai_certificates.git (fetch)
origin git@172.17.0.18:iOS/ttgenwomai_certificates.git (push)
git remote add <name> <url>
:在url创建名字为name的仓库,name为远程仓库的名字。
8、git checkout
迁出一个分支的特定版本。默认是迁出分支的HEAD版本。
git checkout master
:取出master版本的head。
git checkout <branchname> <filename>
:放弃对xx分支的xx文件的修改,如果是当前分支,<branchname>可以省略。
git checkout .
: 放弃所有的修改。
9、git stash 和 git pop
git stash
:是备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop
:从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list
:显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear
:清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
10、tag
// 列出本地tag
$ git tag
// 添加tag
$ git tag -a v0.1.2 -m “0.1.2版本”
// 切换到tag的位置
$ git checkout -b [branch] [tagname]
// 删除tag
$ git tag -d [tagname]
// 推tag
$ git push origin –tags
$ git push origin [tagname]
关于git开发过程中,推荐使用git flow 进行管理,比较方便灵活,适合多人开发团队。以上都是开发中遇见的指令,如果错误,请及时指出。