2020-1-26 GitHub 学习

下载GitHub客户端

https://gitforwindows.org/

github GUI使用

https://blog.csdn.net/edward_2017/article/details/79537077

https://blog.csdn.net/qq_41782425/article/details/85183250
https://www.yangzhiping.com/tech/github.html#q4
https://www.git-scm.com/book/zh/v2

可视化工具

    1. source tree
    1. atom
git --version #显示版本号
git config --gloabal user.name 'xxx'
git config --system 
git config --local
git config --global user.email 'xx@xx.com'
git config --global --list
pwd

# 新建git仓库
# =========== 1已有项目代码 =========#
pwd
ls -al
git init git_learning # 新建仓库,取名
cd git_learning # 进入新建仓库文件夹
ls -al # 有.git 这个隐藏文件夹
git config --global --list
# 设置local属性
git config --local user.name 'xx'
git config --local user.emial 'xx'
git config --local --list
clear
cp ../hello.txt . # 拷贝文件
git commit -m'Add readme' # 创建commit命令,没有被管控
git add hello.txt # 声明文件被管控
git status
git commit -m'Add readme' 
local > global > system

小结

    1. 选择 git bash打开位置
    1. 设置git 基本属性user
    1. git config --基本命令
    1. git命令的优先级 local >global>system
    1. 设置仓库属性 git config --local user.*
    1. 添加仓库文件 git init repository_name
    1. 给文件添加git管理权限 git add filename
    1. 添加git commit -m‘msg’
    1. 显示文件状态 git status

创建一个仓库

pwd
git init git_learning #新建仓库
cd git_learning # 进入新建仓库
touch hello_git # 创建代码
cat >> hello_git << EOF
# ========= 设置仓库的属性=======#
$ git config --local user.name 'zhangyanjie'
$ git config --local user.email '765064890@qq.com'
$ git config --local --list
# ======== 给需要管理的文件夹管理权限======= #
cp ../hello_txt . # 将代码加入仓库,或者在仓库中新建代码
git add hello_git # 添加文件到暂存区
git status #check 是否添加到暂存区
# 仓库中创建的文件不能正常添加到commit 命令
git commit -m'well done'# 添加文件说明
git log # 查看git 日志


# 静态页面相关
git add -u # 将寄存区所有文件一起
git commit -m'add ref'

小结

    1. 通过在工作目录下的修改添加到缓存区
    1. git add -u #整体添加
    1. git commit -m'msg' # 缓存区取代,提交

git 目录重命名

mv readme readme.t
git add readme.t
git rm readme
git status # 麻烦
---
git reset --hard # 将暂存区和工作区清零,危险
git mv readme readme.cp
git commit -m'move readme to readme.cp'
git log

小结

    1. 快速修改寄存器文件名
      git mv a b
      git commit -m'description'
    1. 强制清除工作区的命令:git reset --hard

查看版本演化

git log --oneline # 简要的变更
git log -n4 --oneline # 最近的四次变更
git branch -v # 查看本地有多少分支
$ git checkout -b temp 9676b2bf0ca061d788587e3 #快速创建一个临时分支
vim hello_gt # 修改文件
git commit -m'add test' # 提交修改
git commit -am'add test' #工作区的东西,直接放到版本历史库中,不推荐
git branch -av # 查看所有分支
git log # 当前分支的历史
git log --all #查看所有分支的历史
git log --all -graph # 图形化演示演化过程
git log --all -n4  # 最近四个演化
git log --all -n4 --graph # 最近四个演化,图形化
git log --oneline temp # 指定某一分支演化
git help --web log # 查看详细的参数接口

命令行,深度定制


图形界面看版本历史

gitk

commiter 和 ower 可能是不一样的。
view 定制GUI
选中历史,右键添加tag


git 目录 本地版本管控

cd .git/ # 进入git目录,核心东西
cat HEAD # 查看head指向,工作分支
git branch -av 
git checkout master # 切换分支,要在创库路径下切换
cat config # 记录config 设置信息
git config --local user.name #查看指定信息,confi存放配置信息
cd .git/refs #可以有很多个标签,里程碑。tags;heads 分支,独立的开发空间,moudles
cat master # 指向对应的内存空间
$ git cat-file -t b592328377d30d3a1171564335eb033cb98c510a # 判断指针对应位置的类型(class)
git branch -av
$ git cat-file -t cffcf76994b2ba420cc467fe2363de3222536c7a #查看tag 指针
$ git cat-file -p cffcf76994b2ba420cc467fe2363de3222536c7a # -p  查看内容,hash 值唯一性

# object核心内容
# pack 自动打包
$ git cat-file -t 1c8834032b41b8fe249224154a3569b36eb95b58 # 文件名+进入的文件名,看类型
$ git cat-file -p 1c8834032b41b8fe249224154a3569b36eb95b58 # 看指针对应的内容,修改过得内容--blob 指文件对象

小结

    1. HEAD 软连接
    1. config 配置文件
    1. refs heads 和tags branch
    1. object,文件内容相同,git认为是一个唯一的blob

commit、tree、blob类型,对象之间的关系

    1. 一个commit对应一棵树,代表去除commit本项目,所有为文件夹和文件
    1. 文件夹也是树,blob和文文件名没关系,blob对应的文件内容相同。(节约存储空间)

tree 的个数

git init watch_git


每日总结

    1. git user 配置:
git config user.name 'zyj'
git config user.email 'xx@xx.com'
    1. 创建仓库:
git init reps_name
    1. 添加文件到管理:
git add file_name # 提交到寄存区
git add -u #全部提交
    1. 查看状态:git status
    1. 提交:
git commit -m'msg'
git commit -am'msg' 
    1. 查看配置信息:
git config --local(global、system) --list
git config --local user.name
    1. 文件重命名
git mv a b
    1. 版本演化
git log # 详细信息
git log --oneline -n4 --graph # 简要模式版本变化,图像化显示,最近4次变更
git log --oneline master # 指定branch
    1. 查看帮助信息
git help --web log
    1. 调用图形界面查看
gitk
    1. branch
git checkout -b temp 37be9e9 # 指针,创建branch
git checkout master # 切换branch
git branch -av # 查看所有branch
    1. 查看指针对应的信息
git cat-file -t cffcf76994b2ba420cc467fe2363de3222536c7a # 查看指针指向的类型
git cat-file -p cffcf76994b2ba420cc467fe2363de3222536c7a # -p  查看内容,hash 值唯一性
    1. 寄存区重置(慎用)
git reset --hard

对tree的深入理解

find .git/object
$ git cat-file -t 1d1853b5758d03e5dc5c7bfeab06850 # 指针命名规则:文件夹名+文件名
$ git cat-file -p 1d1853b5758d03e5dc5c7bfeab06850 # 查看指针指向的内容

commit —— tree——文件夹——文件——文件内容


分离头指针的注意事项

git branch -av
git log
$ git checkout 37be9e9bc5b9935f # 查看某一提交commit,提示处于分离头指针状态
'''You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.'''
$ vim styles/style.css # 修改文件信息
$ git status # 查看状态
$ git commit -am'Background to green' # 提交修改
git log
git branch -av
git checkout master
'''
Warning: you are leaving 1 commit behind, not connected to
any of your branches
'''
gitk --all
git branch background 3e73121 # 为修改的内容绑定分支
gitk --all

工作在没有分支的状态,切换branch,之前的工作没有保存。
应用场景——尝试性的修改,HEAD 不和branch 绑定在一起


进一步理解HEAD 和branch

HEAD 可以指向分支或者commit,HEAD指向某一分支的commit或者某一commit(分离头指针状态)

$ git checkout -b fix_back background # 基于background分支,创建并切换到fix_back分支
$ cat .git/refs/heads/fix_back # 查看head指向的指针
$ git cat-file -t 3e73121ab942
$ git cat-file -p 3e73121ab942 # 查看具体内容
$ git diff HEAD HEAD^1 # 查看两者的区别
$ git diff HEAD HEAD^^ # 查看与上上次修改的区别
$ git diff HEAD HEAD~2 # 同上的简要写法

小结

    1. 快速创建和切换分支
    1. 用HEAD 指代具体的commit,diff查看区别
---

$ git diff HEAD HEAD~2 
$ git diff HEAD HEAD^1
$ git diff HEAD HEAD^^

删除branch

gitk --all
git branch -d branch_name # 不能清除
'''error: The branch 'temp' is not fully merged.
If you are sure you want to delete it, run 'git branch -D temp'.'''
git branch -D branch_name # -D强制清理

小结

    1. 删除branch
git branch -D branch_name # -D强制清理
git branch -d branch_name 
git help --web branch # 查看手册

修改最新的commit的msg进行修改

git log -n1
git commit --amend
# 修改msg
git log -n1

修改老旧commit的msg

git log
$ git rebase -i HEAD~4# base 到要修改的parents
# 修改两次
# 使用分离头指针

基于维护自己的分支,没有上传


连续多个commit整合

$ git log
$ git rebase -i d9b859931baef8348
# 选择开关 r,s
# 填写整合的命令
git log

把间隔的commit拼凑在一起

git log
git rebase -i 父指针
git rebase --continue
$ git commit --allow-empty
# 不会整,崩溃了
# 从master复制,重新测试
$ git branch -D fix_back # 删除不能处理的branch
$ git branch test master # 复制branch
$ git checkout test # 切换branch
$ git rebase -i d9b859931ba# rebase重新修改命令
# 复制需要调整的commit的指针
# 将需要放在一起的commit放在一起
# 开始的commit 用pick,之后的用s,将命令合并
$ git status # 查看状态
$ git rebase --continue# 继续进行
git log

小结

    1. branch可以基于某一副本复制粘贴
    1. rebase 命令可用来修改commit的msg,‘r’。可用来整合命令‘pick+s’
    1. 按照提示信息进行报错操作

如何比较暂存区的文件和当前分支的commit进行比较

git status
vi index.html
git add index.html
$ git diff --cached # 查看HEAD和缓存区的区别
vi index.html
git add index.html
$ git diff --cached # 查看HEAD和缓存区的区别
$ git commit -m'Add first git commond'

小结

    1. html,架构中添加信息
    1. git diff --cached# 比较HEAD和暂存区的区别

比较工作区和暂存区的区别

vim index.html
$ git status
$ vim styles/style.css
git diff # 比较工作区和暂存区的区别
vi readme.md
git diff -- readme.md # 查看具体文件的差别,可以多个

小结

    1. 调整html背景颜色,调整字体的颜色和大小
    1. 比较工作区和寄存区的区别
git diff -- a b

让暂存区恢复成HEAD

git reset HEAD # 删除暂存区的改变
git status
git diff --cached # 对比工作区和暂存区,发现没有差别

小结

    1. 删除暂存区,恢复成工作
      区的内容
git reset HEAD

将工作区的文件恢复成暂存区的状态。

工作区——暂存区——commit

vi  index.html
git add index.html
git diff # 比较工作区和暂存区的区别
# 取消工作路径性的变更,checkout
# 改变暂存区的内容,用reset
$ git checkout -- index.html#危险命令,修改不保存
$ git diff index.html

小结

    1. 将工作区用暂存区覆盖
git checkout -- file_name

取消暂存区的内容,部分文件想恢复成HEAD

$ git status
$ git reset HEAD -- styles/style.css # 将寄存区指定文件恢复成HEAD

小结

    1. 将暂存区恢复成HEAD
git reset HEAD -- filename1 filename2

消除最近几次的提交(回退到之前的状态)

gitk --all
# 将某一分支恢复成某commit提交的状态
git branch -av
git log --oneline
$ git reset --hard 27147fe # 恢复到指定的commit(工作区和暂存区)
gitk --all

小结

    1. 恢复到指定的commit(工作区和暂存区)
git reset --hard  27147fe

commit 文件之间的差别

git log -n8 --all --graph
git diff test master  -- readme.cp # 对两个分支指向的最近的commit进行比较
$ git diff HEAD b592328377d3 -- index.html

小结

    1. 对分支进行比较
git diff master test -- index.html

正确的删除文件的方法

rm readme
git rm readme
git reset --hard HEAD
# equal to 
git rm filename

小结

    1. 删除文件 git rm filename
    1. 回复到指定状态
git reset --hard HEAD

紧急加塞的处理办法

手头的工作先保存

vi index.html
git status
git stash # 把当前工作保存,不影响当前工作区。
git status
git stash apply # 将压栈的内容取出,指针保存一直用
$ git stash list # 显示原来工作所处的位置
$ git stash pop # 显示错误,已被覆盖
git stash
git stash pop # 不保存当前工作的指针地址

小结

    1. 清除当前工作台,将当前工作内容封装
git stash
    1. 进行紧急工作
    1. 紧急工作完成继续当前工作
git stash apply # 记住之前工作的想在在哪里,这个地方就停放当前的工作,可重复是使用
git stash pop # 随机寻找一个地方,存放,下次遇到同样的问题,不一定发放在相同的地方

指定不需要git管理的文件

mkdir doc
echo 'hi'> doc/readhim
git status
vim .gitignore #  文件黑名单
rm -r doc
echo 'i am doc' > doc
git status

小结

    1. .gitignore文件,添加管控文件黑名单(不管理)

git的备份

#本地协议
/path # 哑协议
file:///path # 智能协议
https://path
http://path # 平时接触到的协议
user@git-server.com:path/to/ # ssh协议,工作中最常用的智能协议

# 测试备份协议
mkdir 666-backup
cd 666-backup
$ git clone --bare /d/git_learning/git_learning/.git ya.git # 通过哑协议进行文件clone
$ git clone --bare file:///d/git_learning/git_learning/.git zhineng.git # 本地智能协议
$ git remote add zhineng file:///d/git_learning/git_learning/666-backup/zhineng.git # 备份到本地远端
$ git remote -v # 关联远端地址
git branch -av
git branch new_branch test #创建新的branch
$ git push zhineng # 保存修改到远端
$ git push --set-upstream zhineng test # 自动纠错提示

# 没明白,try again
$ git clone --bare file:///d/git_learning/git_learning/.git inter.git # clone 一个裸仓库
# 和远端仓库进行关联
git remote -v 
# 将当前工作同步到远端
$ git remote add intel file:///d/git_learning/git_learning/666-backup/inter.git
# 将仓库变更push
$ git push intel # 同步变更

配置公私钥

ls -al ~/.ssh #查看是否存在公私钥
$ ssh-keygen -t rsa -b 4096 -C "765064890@qq.com"  #产生公私钥,默认enter
ls -al ~/.ssh #查看是否存在公私钥
# id_rsa 是私钥 id_rsa.pub是公钥
# copy ssh key to github
# 头像下标——yourprofile——edit profiles——SSH——new SSHkey

本地仓上传到github

git remote -v # 查看本地远端
# 头像——your repository——clone or download——use SSH——粘贴按钮
$ git remote github git@github.com:Lianlizyj/hello_world.git #报错,github 远端未添加
$ git remote add github git@github.com:Lianlizyj/hello_world.git # 新增远端站点
git remote -v # fetch 下载,push上传
# 建好remote
git push github --add # print yes,没有基于远端做变更
gitk --all
clear
git pull github # fentch + merge
$ git fetch github master # 把github连接到本地
git branch -va #  所有branch
git checkout
git merge gitthub/master # 报错fatal: refusing to merge unrelated histories
git merge -h
$ git merge  --allow-unrelated-histories github/master #使用缺省值
$ git push github master # 上传到远端

小结

git init # 将文件设置为git托管
git add file or dir 
git commit -m'msg'
git remote add matlab git@github.com:Lianlizyj/hello_world.git
git remote -v
$ git fetch hello master # 将远端的 master 下载到本地
$ gitk --all
$ git merge --allow-unrelated-histories hello/master
$ git push --set-upstream hello master

多人协作修改

 git clone git@github.com:Lianlizyj/hello_world.git git_clone
 git config --add --local user.name 'ZYJ'
 git config --add --local user.email  'lianlizyj@mail.dlut.edu.cn'
 git config  --local --list
 git config  --local -l
vi .git/config # 修改配置文件
 git branch -av
 git checkout -b feture/add_git_command origin/feature/add_git_command # 基于远端分支建立新分支
vi README.md #修改readme.md
 git add -u # 添加到暂存区
 git status
 git log
 git push origin HEAD # 上传修改
 git config --local -l
 git remote -v
 git fetch hello
git branch -av
$ git checkout -b feature/add_git_command hello/feature/add_git_command
$ git branch -av

# 切换用户
vim readme.md
git add -u
git commit -m'some people are in trouble'
$ git push origin HEAD # trouble 2 push
# 不起作用,两人在同一个branch下,不能修改相同文件,会引发冲突,解决办法是讲冲突的地方删除

# 假如两人修改的是不同的文件,fast-forwards的解决方案如下
$ git branch -av
vi readme.md
$ git push hello # 报错,not-fast-forward
git fetch hello
$ git merge hello/feature/add_git_command
# 没看懂

小结

修改文件要新建branch,然后再branch上连接到本地修改,然后提交。


相同分支修改不同部分


快速找到感兴趣的项目

    1. git 最好 学习 资料 in:readme stars:>1000
    1. blog easily start in:readme stars:>5000
    1. 'after_script:'+'stage:deploy' filename:.gitlab-ci.yml

搭建一个简洁的blog

    1. fork
    1. config
    1. 添加到post

保证开源项目的质量

    1. fork 项目到本地
  • 2.本地修改
    1. pull request 到源工程
    1. merge 是紫色的,其他是红色的
    1. code review CI检查

组织类型的仓库

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • Git教程 一、Git简介 1.1. Git的诞生1.2.集中式的vs分布式 二、安装Git 三、创建版本库 四、...
    曹渊说创业阅读 945评论 0 2
  • 前言 Git使用教程 Git是什么 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 ...
    90后的思维阅读 906评论 0 0
  • 第一部分是文档,为了日后查看方便放到了前边[可能敲错了,详见阮一峰老师的文章]http://www.ruanyif...
    白璞1024阅读 1,020评论 0 49
  • chapter 1: 如何创建版本库 初始化一个仓库 $ git init 添加文件到Git仓库的过程: $ gi...
    飞将军阅读 2,880评论 0 2
  • 昨天在同事电脑上操作了一把cherry-pick代码,发现很多功能不用,就慢慢忘记了,梳理了下流程图: git c...
    gogoingmonkey阅读 668评论 0 0