看了一些Git的教程,有一些指令还是让人怦然心动的,生怕自己忘记了,这里做一个笔记,看到这个笔记能够马上想起来。如果需要对Git详细了解的,可以去官方网站查看,这里贴出一个官方中文版的电子书:https://git-scm.com/book/zh/v2
关于Git 的历史由来,以及于集中式版本控制系统(如svn、cvs)的区别,以及安装git,这里就不介绍了。补充下,历史由来其实很有意思,呵呵!!
一、初始化本地版本库
初始化一个Git仓库,使用 git init
命令。
添加文件到Git仓库,分两步:
- 使用命令
git add <file>
,注意,可反复多次使用,添加多个文件;也可以使用 git add * ,添加所有文件。 - 使用命令
git commit
,完成。或者使用 git commit -a,提交所有文件,包括未 git add 的文件。
二、版本回退
- 使用 git log 查看操作记录,如果日志内容很多可以使用 git log –pretty=oneline
- 使用git reflog查看HEAD的命令的历史记录。
- 使用git reset HEAD 返回到上次提交,git reset HEAD^^ 返回到上2次的提交。如果加上参数 - -hard,则放弃当前的修改,这里不包括新增文件,因为新增的文件还未被git跟踪(
Untracked
). - 使用git reset <版本号>,可以使用git reflog先查看版本。。如果加上参数 – -hard,则放弃当前的修改,这里不包括新增文件,因为新增的文件还未被git跟踪(
Untracked
)。例如:
git reset –hard fb9e84b
三、回滚
git reset –hard 5154589
git fetch origin/dev 和 git pull
git reset origin/dev
三、版本撤销
- 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout — file。
- 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
- 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
四、删除文件
命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
五、分支的创建与合并
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git checkout <name>
- 合并某分支到当前分支:
git merge <name> ,也使用 git merge --no-ff -m "message" <branch>,注意两条命令的区别。加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
- 删除分支:
git branch -d <name>,-D 强制删除
- 删除远程分支:git branch -r -d origin/fix0414
六、BUG分支
- 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
- 当手头工作没有完成时,先把工作现场
git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。 - 相关的命令有 stash list 、stash pop、stash apply
、stash drop,注意pop和apply的区别。
七、标签
- 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- git tag -a <tagname> -m “blablabla…”可以指定标签信息;
- git tag -s <tagname> -m “blablabla…”可以用PGP签名标签;
- 命令git tag可以查看所有标签。
- 命令git push origin <tagname>可以推送一个本地标签;
- 命令git push origin –tags可以推送全部未推送过的本地标签;
- 命令git tag -d <tagname>可以删除一个本地标签;
- 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
八、配置
在用户目录创建~/.gitconfig
[alias] st = status br = branch co = checkout ci = commit [color] branch = auto diff = auto status = auto [color "branch"] current = yellow reverse local = yellow remote = green [color "diff"] meta = yellow bold frag = magenta bold old = red bold new = green bold [color "status"] added = yellow changed = green untracked = cyan [user] name = xxxx email = xxxx@qq.com [core] autocrlf = input
九、搭建Git服务器
1、创建用户和用户组
# groupadd git # useradd -g git git
2、初始化
# git init --bare guohu.git
3、客户端的公钥加入到git服务器中
# 在客户端创建公钥 # ssh-keygen -t rsa -C "xxx@qq.com" # 将公钥的内容复制到git服务器 # scp id_rsa.pub root@192.168.80.110:/data/www/ #在git服务器上,将客户端的公钥,写入到 /home/git/.ssh/authorized_keys, #如果没有.ssh/authorized_keys,手动在git服务器上创建。 # cat id_rsa.pub > /home/git/.ssh/authorized_keys # 注意 authorized_keys 的权限必须是600 #在客户端使用下面的命令拉分支 #git clone git@192.168.80.110:/data/git/guohu.git 或者 git remote add origin git@192.168.80.110:/home/git/shopx.git # 注意确保 /home/git目录的文件,必须是git的用户和用户组 # 很奇怪,创建/home/git目录下才成功
4、禁用shell登录
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
5、管理
- 搭建Git服务器非常简单,通常10分钟即可完成;
- 要方便管理公钥,用Gitosis;
- 要像SVN那样变态地控制权限,用Gitolite。
十、常用的命令
--pretty=oneline、--no-ff、--graph、--abbrev-commit
十一、生成ssh私钥、公钥
# ssh-keygen -t rsa -C "xxx@qq.com"
参考地址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000