Git笔记

版本控制系统

git config --global user.name 'name'
git config --global user.email 'email' 
# --global 参数:当前机器下所有git仓库均使用此配置

# 创建版本库
mkdir learngit  # 创建文件夹
cd learngit  # 切换路径
pwd  # 显示当前路径

git init  # 初使化,将目录变成Git可管理的仓库
# 当前目录下多了.git文件,不可修改,会破坏Git仓库
# 目录是隐藏的,使用命令使其可见
$ ls -ah
# 不一定使用空目录,使用已有目录直接创建也可以

# 删除库
-- 查看目录下的.git
$ ls -a
-- 删除.git
-- 删除后可看到主分支已消失,
$ rm -rf .git
-- rm的参数:-f 强制删除; -r 递归处理,目录下所有文件一并删除

git add readme.txt
git commit -m '有意义的备注:add readme.txt'
git status  # 查看文件是否有修改
git diff  # 查看文件有哪些差异
# 同上,git add;commit完成修改同步
-- 查看版本库与工作区文件的区别
$ git diff HEAD -- readme.txt

git log  # 版本日志
git log --pretty=oneline
git reset --hard HEAD^  # 上一个版本
git reset --hard 版本号
# HEAD 当前版本
# HEAD^ 上一版本
# HEAD^^ 依次类推,上上一版本
# HEAD~100  往前100个版本

cat readme.txt  # 读取文件
git relog  # 记录每一次命令

# 工作区-暂存区(git add)-版本库
git checkout -- readme.txt   # 撤消工作区的修改
git reset HEAD readme.txt   # 撤消暂存区,放回工作区

# 1 删除1
rm test.txt   # 删除or手动删除
-- 如需删除,仍需删除版本库并提交
git rm test.txt
git commit -m 'remove test.txt'
-- 如误删,则恢复
git checkout -- test.txt
# 2 删除2
git rm test.txt
-- 如需删除,仍需提交
git commit -m '标注'   # 提交
-- 如误删,则恢复
git reset HEAD f2.txt
git checkout -- f2.txt

  • 远程仓库
    注册GitHub账号,设置
-- 目录下有无id_rsa & id_rsa.pub,有则跳过
-- 一路回车默认
-- id_rsa  # 私钥
-- id_rsa.pub  # 公钥
$ ssh-keygen -t rsa -C "youremail@example.com"

使用公钥连接GitHub账号

# 关联远程库
# 远程库名默认origin
$ git remote add origin git@github.com:githubName/库名.git
# 首次推送
$ git push -u origin master

在这里插入图片描述
SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
警告告诉你已经把GitHub的Key添加到本机的一个信任列表里了,只会出现一次;
– 由于远程库是空的,首次推送master分支时加上了 -u 参数,Git不但会把本地的master分支内容推送到新的远程master分支,还会把本地master分支与远程的master分支关联起来,简化以后的远程拉取和推送命令

-- 后续推送
$ git push origin master

# 检测连接情况
# ssh -T github@github.com
  • 从远程库克隆到本地库
$ git clone git@github.com:githubName/库名.git
$ git clone https://gitgub.com/githubName/库名.git
$ ls
-- 查看文件夹中文件明细
-- git支持多种协议,包括ssh, https
-- 通过ssh支持的原生Git最快
  • 分支
    HEAD指向master,master指向提交;
    在这里插入图片描述
    创建新的分支,新建一个指针dev,然后调整HEAD指向dev即可;
    在这里插入图片描述
    合并分支,直接将master直接指向dev当前提交即可;
    在这里插入图片描述
$ git checkout -b dev
-- -b 创建并切换,相当于下面两条命令
$ git branch dev
$ git checkout dev
-- 查看当前分支,*后
$ git branch

切换分支后可能会看到之前更新的内容不见;不同分支上的内容不一致;

-- 合并分支到当前分支
-- "Fast-forward" 快进模式
$ git merge dev
-- 删除分支
$ git branch -d dev
  • 解决冲突:
    当git无法自动合并的时候,必须首先手动编辑为我们希望的内容,再提交
-- 查看分支合并图
$ git log --graph

-- 参数--abbrev-commit 即用简短唯一的值
$ git log --graph --pretty=oneline --abbrev-commit
  • 分支管理策略
# git会首选 Fast forward模式,但此模式下,删除分支后,会丢掉分支信息
# --no-ff参数 普通模式合并
$ git checkout -b dev
$ git add readme.txt
$ git commit -m "add merge"
$ git checkout master
$ git merge --no-ff -m "merge with no-ff" dev
$ git log --graph --pretty=oneline --abbrev-commit
  1. master分支应该是非常稳定的,仅用来发布新版本;
  2. 平时干活在dev分支上,dev分支不稳定,发布版本时再把dev合并到master上
  3. 每个人都有自己的分支,时不时往dev分支上合并即可
    在这里插入图片描述
  • Bug分支
    需临时处理紧急任务时,可将手中任务临时存储起来,待处理完后再回来。
# 储存当前工作现场
$ git stash
# 查看储存的工作现场
$ git stash list

# 恢复工作现场
$ git stash pop
# 等价于下面两个:恢复 + 删除
$ git stash apply stash@{0}
$ git stash drop stash@{1}
  • Ferture分支(同bug分支)
    新功能开发,新建feature分支,开发完后,合并,删除分支
$ git checkout -b feature-vulcan
$ git add vulcan.py
$ git status
$ git commit -m "add feature vulcan"
$ git checkout dev
$ git merge --no-ff -m "merge feature vulcan"
$ git branch -d feature-vulcan
-- 强行删除
$ git branch -D feature-vulcan
  • 多人协作
-- 查看远程库的信息
$ git remote
-- 远程默认为origin
$ git remote -v
-- 推送分支
$ git push origin master
$ git push origin dev

并非所有分支都需推送到远程:

  1. master分支是主分支,需时刻与远程同步;
  2. dev分支是开发分支,团队成员都需在上面工作,需时刻与远程同步;
  3. bug分支只用于本地修复,不需同步;
  4. feature分支是否推到远程,取决于是否与人协作开发。
  • 抓取分支
$ git branch
-- 本地创建和远程分支对应的分支
-- 远程需已创建分支
$ git checkout -b dev origin/dev
-- 建立本地分支与远程分支的关联
$ git branch --set-upstream-to branch-name origin/branch-name
  • 多人工作流程:在这里插入图片描述
  1. 试图用git push origin branck-name推送修改;
  2. 如推送失败,因远程分支比本地更新,需先git pull
  3. 如合并冲突,先解决冲突,并在本地提交
  4. 无冲突or冲突解决后,推送即可
    注:如git pull提示no tracking information,则本地分支与远程分支的链接关系未创建,先git branch --set-upstream-to branch-name origin/branch-name
  • rebase
-- 把本地未push的分叉历史整理成直线
-- 查看历史提交的变化时更容易,便于三方对比
$ git rebase
  • 标签管理
    发布版本时,通常在版本库中打标签(tag),标签是版本库的快照。
    标签指向某个指针,是一个有意义的名字,与某个commit绑定,便于记住查找。
  • 创建
-- 默认标签当前版本
$ git tag v1.0
-- 查看所有标签
$ git tag
-- 指定版本打标签
$ git tag v0.9 commit_id
-- 查看标签信息
$ git show <tagname>
-- 创建带说明的标签
-- -a指定标签名
-- -m指定说明文字
$ git tag -a v0.1 -m 'version 0.1 released' 1094adb
  • 操作
-- 删除
$ git tag -d v0.1
-- 推送标签到远程
$ git push origin v1.0
-- 推送所有本地标签
$ git push origin --tags
-- 如标签已推送至远程,删除
-- 先删除本地标签,再删除远程标签
$ git tag -d v0.1
$ git push origin :refs/tags/v0.1
  • Fork 别人的项目到自己的库,通过自己的库参与,如需进一步提交修改,在github上可发起pull request.后等对方接受。
  • 码云
-- 关联码云远程库
-- 库名:gitee
$ git remote add origin git@gitee.com:码云用户名/库名.git
$ git remote add github git@github.com:用户名/库名.git
-- 删库
$ git remote -v 
$ git remote rm origine
  • 使用多个远程库
  • 先删除已关联的远程库
  • 后先关联 GitHub
  • 再关联 码云
    在这里插入图片描述
-- 推GitHub
git push github master
-- 推码云
git push gitee master
  • 自定义Git
-- 颜色
$ git config --global color.ui true
  • 忽略特殊文件
    创建.gitignore文件,将需要忽略的文件备注进去
    eg.配置文件*.conf
    .gitignore文件放入版本库进行管理
-- 强制添加
$ git add -f 文件
-- 查看哪个规则需要修改
$ git check-ignore -v 文件
  • 配置别名
--global 全局参数
$ git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.unstage 'reset HEAD'
-- 最后一次提交信息
$ git config --global alias.last 'log -1'
仓库的配置文件放于.git/config
当前用户的配置文件放于主目录下的.gitconfig
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值