Git

笔记

Posted by zhangyingji on August 9, 2018

前言

第一部分列举了常用的使用场景(以github为例)和做了一些报错整理

第二部分列举了常用的命令

参考来源:

  1. 廖雪峰的官方网站

场景

首次使用git

# 配置用户名和邮箱
git config --global user.name <用户名>
git config --global user.email <邮箱>

已有项目转git

# 把当前目录变成Git可以管理的仓库
git init

使用SSH首次连接github远程仓库

若无用户主目录下没有.ssh目录,则创建SSH Key,有则下一步

# 创建SSH key
ssh-keygen -t rsa -C "邮箱"

在github的设置中添加公钥id_rsa.pub

github创建仓库后,添加本地仓库

# 与远程仓库(设为origin)建立连接
git remote add origin git@github.com:<用户名>/<仓库名>
# 首次推送和远程master关联,以后推送可以直接git push,不需要再指定分支
git push --set-upstream origin master 

新的伙伴需要在分支展开工作

# 直接克隆(默认master分支)
git clone git@github.com:<用户名>/<仓库名>
# 也可以指定分支克隆
git clone -b <指定分支> git@github.com:<用户名>/<仓库名>
# 克隆远程仓库的分支到本地,并切换到该分支(checkout表示切换,-b表示新建)
# PS: 这种方法拉分支后,推送可以直接git push,无需指定分支名
git checkout -b <本地分支名> origin/<远程分支名>

# 每次提交到远程仓库前,先获取最新代码
git pull

# 若没有修改同个地方,代码会自动合并
# 若产生冲突,会提示解决冲突

# 冲突解决方法1:stash 此方法能减少commit
# 先将本地修改保存到堆栈中,写明详情
git stash save "detail"
# 此刻拉取最新代码到本地
git pull
# 弹出本地修改的栈顶,
git stash pop

# 本地修改和最新的代码会提示产生冲突
# 找到冲突文件,修改代码保存之后,推送修改
# 更多冲突解决相关请看第二部分

# 推送修改
# 1. 将目录下所有文件添加到暂存区
git add .
# 2. 提交到本地仓库,养成好的习惯,将提交说明写清楚
git commit -m "提交详情"
# 3. 本地仓库推送到远程仓库
git push
# 本地分支与远程仓库分支没有关联时,需要指定分支名
git push origin <branchname>推送修改

新伙伴要合并分支到远程

# 拉取更新,保证自己的代码是最新的
git pull
# 选择要合并的分支到 →→当前分支←← ,注意这里产生了一个commit,
git merge <branchname> -m 'detail'
# 将合并后的分支提交到远程仓库
git push origin <branchname>

报错整理

git pull提示no tracking information,需要建立本地分支和远程分支的关联

git branch --set-upstream <branch-name> origin/<branch-name>

Filename too long

参考:https://blog.csdn.net/liuxiao723846/article/details/78329223

版本管理

版本回退

# 提交记录
git log
# 命令记录
git reflog
# 查看状态
git status

# 回退到上个版本
git reset --hard HEAD^

撤销修改

git checkout -- <filename>

删除文件

git rm -- <filename>
git commit -m 'detail'

推送

#第一次推送master分支的所有内容,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
git push -u origin master

分支管理

创建合并分支

# 查看分支
git branch
# 创建分支
git branch <name>
# 切换分支
git checkout <name>
# 创建切换分支
git checkout -b <name>
# 合并某分支到当前分支
git merge <name> -m 'details'
# 删除本地分支
git branch -d <name>
# 强行删除未合并过的分支
git branch -D <name>
# 删除远程分支
git push origin :<name>

冲突解决

# 合并分支可能提示冲突,用git status可以查看冲突情况
git status

# 查看冲突的文件进行修改,重新提交即可

# 查看分支合并图
git log --graph

分支管理策略

–no-ff 禁用Fast forward

# 禁用Fast forward,产生commit,从而可以看到分支信息
git merge --no-ff -m "merge with no-ff" <branchname>

Bug分支

# 使用stash保存本地修改,多次修改可以多次stash
git stash
# 查看stash列表
git stash list

# 切换master创建bug分支,切换到bug分支修复
# 切换回master合并并删除bug分支

# 恢复先前工作,不删除stash
git stash apply
# 恢复先前工作,并清空stash
git stash drop

rebase

把本地未push的分叉提交历史整理成直线

git rebase

标签管理

创建标签

# 切换到要打标签的分支,可选参数-m,增加说明
git tag <tagname>
# 标签默认打在最新的commit上,也可以选定
git tag <tagname> <commit id>

# 查看
git tag
# 查看标签信息
git show <tagname>

操作标签

# 本地删除
git tag -d <tagname>
# 远程删除
git push origin :refs/tags/<tagname>
# 推送某个标签到远程
git push origin <tagname>
# 推送全部未推送过的本地标签