git的管理方式有两种,分别为ssh和http,http的管理方法比较简单,复杂点的是使用ssh方式来管理远程代码。两种管理方法操作大致相同,但是ssh相较会更加安全,因为需要ssh-key证书认证,而且ssh管道管理方式比http管理效率更高,更快。
一 、全局配置
$ git config --global user.name "xxx"
$ git config --global user.email "xxx@gmail.com"
Note:用户名必须是已注册的用户名,邮箱必须为该用户绑定的邮箱地址
二、生成SSH密钥过程
如果没有密钥则不会有此文件夹,有则备份删除
2.生存密钥:
$ ssh-keygen -t rsa -C “xxx@gmail.com”
按3个回车,密码为空。
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 id_rsa(文件名)
需要之前输入密码。
4.在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥。
打开https://github.com/ ,登陆xxx,然后添加ssh
5.测试:ssh git@github.com
The authenticity of host ‘github.com (207.97.227.239)’ can’t be established.RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘github.com,207.97.227.239′ (RSA) to the list of known hosts.
ERROR: Hi tekkub! You’ve successfully authenticated, but GitHub does not provide shell access
Connection to github.com closed.
三、git常用控制命令
3.1 git基本操作
本地创建git仓库,xxx为仓库名称
git init xxx
#从远程版本库中现在xxx项目,XXX为远程用户名,xxx.git为远程的仓库名称
#ssh克隆方法:此方法为ssh的下载方法,需要按照上文中所说的在页面上添加ssh秘钥,并在本地配置远程用户名
git clone git@github.com:XXX/xxx.git
#从远程版本库中现在xxx项目,XXX为远程用户名,xxx.git为远程的仓库名称
#http克隆方法
git clone https://github.com/XXX/xxx.git
#添加远程版本库origin,语法为 git remote add [shortname] [url]
git remote add origin /xxx/testr.git
文件分为三个状态,已修改、已暂存、已提交,修改过但是未跟踪的文件状态称为已修改;add文件后,文件进入跟踪状态,称为已暂存状态;commit文件后,文件进入已提交状态
#使用下面的命令跟踪文件,将文件存入已暂存状态
git add '修改过的文件'
#使用下面的命令将文件转到已提交状态
git commit -m '提交描述'
查看当前分支文件修改状态
#状态简览
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
删除文件
git rm '文件名'
移动文件
git mv 'file_from' 'file_to'
忽略文件
将一些文件无法纳入Git的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。 来看一个实际的例子:
$ cat .gitignore文件 .gitignore 的格式规范如下:
*.[oa]
*~
所有空行或者以 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配。
匹配模式可以以(/)开头防止递归。
匹配模式可以以(/)结尾指定目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
撤销对文件的修改
git checkout 文件名
打标签,生成重要版本记录
#列出当前标签
git tag
#搜索某一个标签
git tag -l 'v1.8.5*'
#创建标签
git tag -a v1.0 -m 'my version 1.0'
#查看标签内容
git show v1.0
#轻量标签
git tag v1.0-lw
#后期针对某一次提交打标签
git tag -a v1.2 9fceb02
#提交一个标签
git push origin v1.0
#提交所有标签
git push origin --tags
#检出标签
git checkout -b version2 v1.0
#删除tag
git tag -d 标签名
分支管理:
#新建分支方法一
git checkout -b versionx
#新建分支方法二
git branch versionx
git checkout versionx
#查看所有分支
git branch
#查看所有分支的最后一次提交,分支名称前的*代表当前所在的分支
git branch -v
#合并子分支
git checkout master
git merge versionx
#删除子分支
git branch -d versionx
#查看各分支合并工作情况
git log --oneline --decorate --graph
#分支冲突解决
#删除冲突文件中生成的描述文本,然后提交
git commit -a -m 'fdkkfd'
#查看所有的提交动作
git reflog show HEAD@{now} --all
#查看当前分支操作历史(图形化)
git log --oneline --graph
#查看所有分支操作历史(图形化)
git log --oneline --graph --all
#也可以自定义显示内容
git log --pretty=format: "%an- %s"
#筛选已合并过的分支
git branch --merged
#筛选未合并过的分支
git branch --no-merged
#从远程服务器上clone下来的默认的分支为起始分支为origin,如果是运行git init生成的仓库,默认的起始分支为master
#另外也可以运行下面的命令修改clone时起始分支的名称
git clone -o roberttest https://github.com/XXX/xxx.git
#拉取远程分支数据到本地,fetch方法只是拉取数据不会合并数据
git fetch 分支名称
#使用pull方法拉取的数据会合并本地的数据
git pull 名称
远程分支管理
#查看远程引用的完成列表
git ls-remote (remote)
#或者
git remote show (remote)
#将仓库添加到另一个分支中,或者托管到另一个仓库中管理
git remote add lp(分支名称) /xxx/xxx.git(要被托管的git url)
git配置
#配置用户名
git config user.name "用户名"
#配置用户邮箱
git config user.email "用户邮箱"
#查看配置
git config --list
git变基:将提交到某一分支上的所有修改都移至另一分支上,变基命令是在推送前清理提交使之整洁的工具,并且只在从未推送至共用仓库的提交上执行变基命令.
#方法一
git checkout ex
git rebase master
#方法二
git checkout master
git merge ex
#你就可以使用 git rebase 命令的 --onto 选项,选中在 client 分支里但不在 server 分支里的修改
git rebase --onto master server client
#可以直接将特性分支(server)变基到目标分支(即 master)上
git rebase master server
git回退到某次的commit:某次commit后发现提交的有问题,想要回退本次commit结果,使用如下命令
git reset 分支序列号
git reset e87d7ff
git从某次提交中拉出一个新分支:
git branch 新分支名 提交的分支序列号
git branch fix 70bcd5c