Git学习笔记

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:管理权限工具 不要把有限的生命浪费到权限斗争中

原文地址:https://www.cnblogs.com/hudunkey/p/10264250.html