Git&GitHub学习笔记

一、Git的概念

  • Git是先进的分布式版本控制系统,而Github是常用的Git代码托管中心。

二、版本控制

版本控制工具

  • 集中式版本控制工具,如SVN,CVS,VSS…

在这里插入图片描述

  • 分布式的版本控制工具,如GIt
    在这里插入图片描述
  • 【注】: 分布式的一大优势在于,可以避免“单点故障”,即中心服务器down机之后,版本历史信息就丢失了

Git的优势

Git的分区

Git和代码托管中心

  • 【注】:码云即Gitee

本地库和远程库

三、Git命令行操作

1.本地库操作

  • Firstly:git 可以查找命令及其用法

本地库初始化

$ cd GitPath/ # 先进入Git的路径(自定义)
$ git init

设置签名

# 项目级别/仓库级别 的用户信息生成在Git路径下的.git/config
$ git config user.name wjtang
$ git config user.email 1254752330@qq.com
$ cat .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
[user]
	name = wjtang
	email = 1254752330@qq.com
	
# 系统用户级别 用户信息在主目录下(cd ~)的.gitconfig
$ git config --global user.name wjtang_global
$ git config --global user.email 1254752330@qq.com_global
$ cd ~  # 切回主目录
$ ls -la | grep .git
-rw-r--r--   1 wjtang  staff     49  3 16 20:22 .gitconfig

$ cat .gitconfig 
[user]
	name = wjtang_global
	email = 1254752330@qq.com_global

查看状态

$ cd GitPath/
$ git status # 查看git的状态

添加

# git add 命令
# 若发现有未跟踪(track),可以使用 git add 来track
# track 可以将文件从 “工作区” 跟踪到 “暂存区”
$ git add good.txt 

提交

# git commit 命令
# commit 可以将文件从 “暂存区” 提交到 “本地库”
$ git commit good.txt  # 注意,提交时会要求为本次提交

# 【注】:若文件修改了也需要重新走一遍 git add 和 git commit 才能使修改生效

查看历史

$ git log # 查看日志
$ git log --oneline # 只显示关键的提示信息,显示格式更好
$ git reflog

版本前进后退

  • 本质: 调整HEAD指针
  • 方式:基于索引值操作(推荐);使用^符号;使用~符号
$ git reflog

$ git reset --hard 7a867b0 # 移动 head 到 7a867b0(索引值)
$ git reset --hard HEAD^ # head 回退一个版本, HEAD^^^表示回退3个版本
$ git reset --hard ~3  # head 回退3个版本

# git reset 三个参数的对比
--soft # 仅仅在本地库移动HEAD指针
--mixed # 本地库移动HEAD指针 + 重置暂存区
--hard # 本地库移动HEAD指针 + 重置暂存区 + 重置工作区

删除文件后找回

# 思路:通过回退版本完成数据的恢复
$ rm test
$ git add test
$ git commit -m "delete test" test #提交时附带了说明message

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

比较文件差异

git diff apple.txt # 工作区的文件 与 暂存区进行比较
git diff HEAD apple.txt # 工作区的文件 与 本地库进行比较
git diff HEAD^ apple.txt # 工作区的文件 与 上一个版本的本地库比较

# 比较多个文件的差异
git diff

分支操作

  • 概念:版本控制过程中,多条线同时推进多个任务
  • 好处:
    • 多个分支,允许试错;
    • 并行推进,提高效率;
具体操作
git branch -v # 查看所有分支
git branch hot_fix # 建立分支hot_fix
git checkout hot_fix # 切换分支

# 合并分支
git checkout master # 1.切换到接受合并的分支上
git merge hot_fix # 2.merge另一个分支
处理合并冲突
  • 当多个分支修改同一文件并需要合并时,很容易冲突

# 1.手动编辑冲突文件
git add good.txt # 2. git add
git commit -m "cope with the confict"# 3. git commit 注意,这里不用加文件名;解决冲突之后commit不用加文件名

四、Git基本原理

1.Hash

  • Git使用的是Hash算法

2.文件管理机制

集中式版本控制

  • 增量式

分布式版本控制

  • 全量式

Git文件管理细节

  • 通过Hash函数计算文件的id

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uN4tMqBI-1616313145449)(/Users/wjtang/Library/Application Support/typora-user-images/image-20210318165550896.png)]

3.分支管理机制

  • Git新建分支时,只是新建了指针,而非复制一遍目录和文件,效率得到了很大的提升;
  • HEAD进行版本前进、回退时,也只是移动了指针;

五、GitHub

Git和代码托管

本地库与远程库交互

GitHub创建远程库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fR6VLZ0v-1616313145451)(/Users/wjtang/Library/Application Support/typora-user-images/image-20210321132036001.png)]

创建本地库

mkdir huashan # 新建路径
cd huashan
git init # git 初始化
vim huashanjianfa.txt # 新建文件

本地库与远程库交互

  • push 操作
# 为远程库的地址起一个别名叫 origin
git remote add origin https://github.com/wjtang123/huashan.git
git remote -v # 查看远程库地址

git add huashanjianfa.txt 
git commit -m "Test interaction" huashanjianfa.txt

git push origin master # 将master分支push到远程库
  • clone 操作
# 在另一个文件夹下,使用clone
git clone https://github.com/wjtang123/huashan.git
# clone三大效果:1.下载远程库到本地;2.创建origin远程地址别名;3.初始化本地库;

# 即不需要初始化就可以直接clone
# 【注】:clone的远程地址的查找方式如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NOwsk8VM-1616313145453)(/Users/wjtang/Library/Application Support/typora-user-images/image-20210321140207714.png)]

  • 修改clone下来的本地库
vim huashan/huashanjianfa.txt 
cd huashan/
git add huashanjianfa.txt  # 添加修改的文件到暂存区
git commit -m "令狐冲做的修改" huashanjianfa.txt # 提交到本地库

git push origin master # push到远程库
# 由于远程库是很多情况下是别人的,我们只是clone下来做了修改,所以提交时会不成功
# 提交不成功的解决方案是,让远程库owner将我们邀请到团队
# 邀请别人到团队的方法如下,邀请完成后可以复制邀请链接,发给该好友

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xjpyv7Jf-1616313145454)(/Users/wjtang/Library/Application Support/typora-user-images/image-20210321142018028.png)]

  • Pull 操作; pull = fetch + merge
# fetch + merge
git fetch origin master # 远程文件fetch到本地
git checkout origin/master # 切换到远程的master分支
git merge origin/master # 远程的master合并到本地

# pull
git pull origin master

多个远程库之间的交互

fork

  • 复制其他远程库到自己的远程库

Pull request

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k42gwubN-1616313145455)(/Users/wjtang/Library/Application Support/typora-user-images/image-20210321151609441.png)]

  • 【注】:IDE中的项目如果使用Git,有的文件不需要提交的,记得忽视
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值