下载GitHub客户端
github GUI使用
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
可视化工具
- source tree
- 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
小结
- 选择 git bash打开位置
- 设置git 基本属性user
- git config --基本命令
- git命令的优先级 local >global>system
- 设置仓库属性 git config --local user.*
- 添加仓库文件 git init repository_name
- 给文件添加git管理权限 git add filename
- 添加git commit -m‘msg’
- 显示文件状态 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'
小结
- 通过在工作目录下的修改添加到缓存区
- git add -u #整体添加
- 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
小结
- 快速修改寄存器文件名
git mv a b
git commit -m'description'
- 快速修改寄存器文件名
- 强制清除工作区的命令: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 指文件对象
小结
- HEAD 软连接
- config 配置文件
- refs heads 和tags branch
- object,文件内容相同,git认为是一个唯一的blob
commit、tree、blob类型,对象之间的关系
- 一个commit对应一棵树,代表去除commit本项目,所有为文件夹和文件
- 文件夹也是树,blob和文文件名没关系,blob对应的文件内容相同。(节约存储空间)
tree 的个数
git init watch_git
每日总结
- git user 配置:
git config user.name 'zyj'
git config user.email 'xx@xx.com'
- 创建仓库:
git init reps_name
- 添加文件到管理:
git add file_name # 提交到寄存区
git add -u #全部提交
- 查看状态:git status
- 提交:
git commit -m'msg'
git commit -am'msg'
- 查看配置信息:
git config --local(global、system) --list
git config --local user.name
- 文件重命名
git mv a b
- 版本演化
git log # 详细信息
git log --oneline -n4 --graph # 简要模式版本变化,图像化显示,最近4次变更
git log --oneline master # 指定branch
- 查看帮助信息
git help --web log
- 调用图形界面查看
gitk
- branch
git checkout -b temp 37be9e9 # 指针,创建branch
git checkout master # 切换branch
git branch -av # 查看所有branch
- 查看指针对应的信息
git cat-file -t cffcf76994b2ba420cc467fe2363de3222536c7a # 查看指针指向的类型
git cat-file -p cffcf76994b2ba420cc467fe2363de3222536c7a # -p 查看内容,hash 值唯一性
- 寄存区重置(慎用)
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 # 同上的简要写法
小结
- 快速创建和切换分支
- 用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强制清理
小结
- 删除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
小结
- branch可以基于某一副本复制粘贴
- rebase 命令可用来修改commit的msg,‘r’。可用来整合命令‘pick+s’
- 按照提示信息进行报错操作
如何比较暂存区的文件和当前分支的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'
小结
- html,架构中添加信息
- git diff --cached# 比较HEAD和暂存区的区别
比较工作区和暂存区的区别
vim index.html
$ git status
$ vim styles/style.css
git diff # 比较工作区和暂存区的区别
vi readme.md
git diff -- readme.md # 查看具体文件的差别,可以多个
小结
- 调整html背景颜色,调整字体的颜色和大小
- 比较工作区和寄存区的区别
git diff -- a b
让暂存区恢复成HEAD
git reset HEAD # 删除暂存区的改变
git status
git diff --cached # 对比工作区和暂存区,发现没有差别
小结
- 删除暂存区,恢复成工作
区的内容
- 删除暂存区,恢复成工作
git reset HEAD
将工作区的文件恢复成暂存区的状态。
工作区——暂存区——commit
vi index.html
git add index.html
git diff # 比较工作区和暂存区的区别
# 取消工作路径性的变更,checkout
# 改变暂存区的内容,用reset
$ git checkout -- index.html#危险命令,修改不保存
$ git diff index.html
小结
- 将工作区用暂存区覆盖
git checkout -- file_name
取消暂存区的内容,部分文件想恢复成HEAD
$ git status
$ git reset HEAD -- styles/style.css # 将寄存区指定文件恢复成HEAD
小结
- 将暂存区恢复成HEAD
git reset HEAD -- filename1 filename2
消除最近几次的提交(回退到之前的状态)
gitk --all
# 将某一分支恢复成某commit提交的状态
git branch -av
git log --oneline
$ git reset --hard 27147fe # 恢复到指定的commit(工作区和暂存区)
gitk --all
小结
- 恢复到指定的commit(工作区和暂存区)
git reset --hard 27147fe
commit 文件之间的差别
git log -n8 --all --graph
git diff test master -- readme.cp # 对两个分支指向的最近的commit进行比较
$ git diff HEAD b592328377d3 -- index.html
小结
- 对分支进行比较
git diff master test -- index.html
正确的删除文件的方法
rm readme
git rm readme
git reset --hard HEAD
# equal to
git rm filename
小结
- 删除文件 git rm filename
- 回复到指定状态
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 # 不保存当前工作的指针地址
小结
- 清除当前工作台,将当前工作内容封装
git stash
- 进行紧急工作
- 紧急工作完成继续当前工作
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
小结
- .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上连接到本地修改,然后提交。
相同分支修改不同部分
快速找到感兴趣的项目
- git 最好 学习 资料 in:readme stars:>1000
- blog easily start in:readme stars:>5000
- 'after_script:'+'stage:deploy' filename:.gitlab-ci.yml
搭建一个简洁的blog
- fork
- config
- 添加到post
保证开源项目的质量
- fork 项目到本地
- 2.本地修改
- pull request 到源工程
- merge 是紫色的,其他是红色的
- code review CI检查