git学习笔记
以下内容是学习,廖雪峰老师的git教程之后整理的笔记
1、创建repo
- mkdir learngit
cd learngit
git init
2、编写README.md
-
$ echo "git is a version control system"
echo "git is free software"
git add README.md #add to repo
git commit -m "first commit" # commit to tell repo -
git can add or commit file1.txt file2.txt
-
git log #查看历史记录
git log --pretty=oneline #更好的查看日志
git reset --hard HEAD^ #版本回退上一个版本
git reflog #查看命令历史,以便知道要回退到哪个版本
git reset --hard commit_id #在版本的历史之间穿梭 -
git status #查看状态
git add 命令实际上就是把要提交的所有修改放到暂存区
git commit 可以一次性把暂存区的所有修改提交到分支 -
git diff HEAD -- xxxx.txt #可以查看到工作区和版本库里面最新版本的区别
-
git checkout -- file #可以丢弃工作区的任何修改
-
添加远程仓库
-
先生成ssh key ssh-keygen -t rsa -C "youemail"
生成的ssh key 在用户的主目录 .ssh下
将 ssh key 添加到github上
ssh -T git@github.com #验证是否成功添加
git remote add origin git@github.com:xxx/xxx.git #关联远程库
git push -u origin master #将本地库所有内容推送到远程库上
-u 参数:git把本地的master和远程新的master分支关联起来
git push origin master 向远程推送修改
git clone xxx #克隆repo -
分支管理
git checkout -b dev #创建dev分支 切换到dev分支上
-b 参数表示 创建病切换:git branch dev and git checkout dev
git branch #查看当前分支
git checkout master #切换会master分支
git merge drv #将dev的分支合并到master分支
git branch -d dev #删除dev分支
git log --graph #查看分支合并图
git merge --no-ff -m "xxx" dev
--no-ff 参数,表示禁用fast forward 相当于在master分支上提交一个commit -
处理bug分支
git stash #将当前工作现场储藏起来
git stash list #查看储藏的工作现场
git stash apply #恢复工作现场 但是恢复的stash内容并不删除
git stash drop #删除恢复的stash内容
git stash pop #删除的同时将stash内容也删除了 -
删除分支
git branch -d xxxx
-D 参数:强行删除 -
多人协作
git remote #查看远程库的信息
-v 参数:显示更详细的信息
git push origin master or dev #选择推送的分支
master 是主分支 dev 是团队开发分支 这两个需要同步到远程
由于克隆下来的只有master分支
git checkout -b dev origin/dev #创建远程origin的dev分支到本地
git pull #把最新的提交从origin/dev 抓下来 在本地合并 解决冲突
git rebase #rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比 -
标签管理
标签管理更加方便便捷 不用去记历史中的commit id -
创建标签
git tag v1.0 #给当前分支打上标签
git tag #查看标签
git tag v0.9 commit id #给commit id 打上标签
git show#查看标签信息
git tag -a v0.1 -m "version 0.1 released" commit id
-a 参数:指定标签名 -m 指定说明文字
-d 参数:删除标签
git push prigin v1.0/--tags #推送一个标签或者所有标签
如果标签已经推到远程:
先将本地的标签删除:git tag -d v0.9
再远程删除:git push origin :refs/tags/v0.9 -
使用github 和 码云
两个都是远程代码托管平台
clone 别人的项目自己没有push权限 需要先fork别人的项目 再push 再在github上面进行pull request
码云是国内版的github 国内连接网速快 与github的用法一样 -
自定义git
自定义git更好的工作
git config --global user.name/email xxx/xxx@gmail.com
git config --global color.ui true #显示颜色 命令输出更加醒目
.gitignore #再.gitignore文件中可以填入需要忽视提交的文件
git add -f xxx #强制提交
git check-ignore -v xxxx #检查.gitignore是否写得有问题 -
配置别名
git config --global alias.st status #告诉git 以后st 就表示 status
--global #s是全局变量 对本机所有仓库起作用
配置文件在:.gitconfig -
搭建git服务器
建议是ubuntu or debian系
sudo apt-get install git
sudo adduser git #创建一个git用户用来运行git服务
创建ssh登录:收集所有用户的公钥 将所有的公钥导入到/home/git/.ssh/authorized_keys 文件里
选定一个目录作为git仓库:假定是/srv/sample.git
sudo git init --bare sample.git #创建一个裸仓库 现在没有工作区
sudo chown -R git:git sample.git #将owner改为git 其他用户不需要登录服务器去修改工作区
出于安全考虑 创建的git用户不允许登录shell 修改/etc/passwd 文件
git: x:1001:1001:,,,:/home/git:/bin/bash 改为:git: x:1001:1001:,,,:/home/git:/usr/bin/git-shell
git用户可以正常通过ssh使用git 但是无法登录shell git-shell 登录shell 就退出
git clone xxx #通过clone远程仓库在各自的电脑上运行
Gitosis:批量管理公钥
Gitolite:管理权限工具 不要把有限的生命浪费到权限斗争中