Git
git 简介
产生历史
git 是目前最先进的分布式版本控系统。在开源的 Linux 发展的时候,代码的管理是复制手工合并的,效率很低。于是 Linus 选择了一家集中式的版本控制系统,但是由于中间合作出现问题,于是 Linus 就自己开发了一套 git分布式的版本控制系统,之后 Linux 开源代码的管理就放在了 git 上管理了。之后 GitHub 的上线也让 git 风靡至今。
- git 的两大特点
- 多人合作开发代码
- 分布式:有一台服务器存储代码,每个人从服务器克隆代码到本地。然后每个人可以提交自己的修改和拉取别人的修改。
安装和使用 git
- 安装 git:
sudo apt install git
- 使用 git:
- 创建一个仓库:
git init
- 创建一个版本:
git add 文件名
,git commit -m '版本1'
- 查看历史版本:
git log
- 版本的回退:
git reset --hard HEAD^
。其中 HEAD 表示当前最新版本,HEAD表示当前版本的前一个版本,HEAD^表示当前版本的前前个版本,也可以使用 HEAD~1 表示当前版本的前一个版本,HEAD~100 表示当前版本的前 100 版本。但是版本的回退并没有删除之前的记录。 - 版本的倒回退:
git reset --hard 版本号
。版本号就是提交的摘要信息,通过git relog
可以查看。
- 创建一个仓库:
工作区和暂存区
- 工作区:电脑中的一个目录。
- 暂存区:工作区中有一个隐藏目录
.git
,这是 git 的版本库:其中最重要的就是称为暂存区的东西,还有 git 为我们自动创建的第一个分支master
以及指向master
的指针HEAD
。
git 工作流程
- 在工作区进行创作修改,通过
git add 文件名
将修改添加到暂存区;或者使用git checkout -- 文件名
丢弃修改。 - 通过
git commit -m '说明'
把暂存区的所有内容提交到当前分支,也就是创建了一个版本。 - 通过 git status 命令查看当前工作树的状态。
- 当修改没有添加到暂存区时可以使用
git checkout -- 文件名
来丢弃修改。 - 但是如果修改已经添加到暂存区,可以使用
git reset HEAD 文件名
来取消暂存。 - 如果修改已经添加到暂存区并且已经创建了一个版本,那么需要用到版本的回退,
git reset --hard HEAD^
。
对比文件的不同
- 对比工作区和暂存区的不同:
git diff HEAD -- 文件名
。 - 对比两个版本的不同:
git diff HEAD HEAD^ -- 文件名
。
分支管理
分支可以类似于两个平行的宇宙。主要用于去开辟一个新的分支去实现一个新的功能,这个分支并不会对其他分支产生任何影响。当功能开发完善之后,还可以将新分支的内容一次性合并到主分支master
上。这样既安全有不影响其他人的正常工作。
创建和合并分支
在创建仓库时会默认创建一个主分支master
,指针是HEAD
。当创建一个分支dev
时,将HEAD
指针指向dev
分支。可以指定当前工作分支在哪一个分支上,之后的修改提交就会记录在该分支下。
- 查看分支:
git branch
- 创建分支:
git branch 分支名
- 创建并切换分支:
git checkout -b 分支名
- 切换分支:
git checkout 分支名
- 将某个分支合并到 master:
git merge 分支名
- 删除分支:
git checkout -d 分支名
合并冲突
当两个分支没有同时有两个相同的修改时,合并时默认采用Fast-forward
,即快速合并。但是如果两个分支修改的内容有冲突时会发生合并冲突,这时就需要手动解决冲突。
- 禁止快速合并:
git merge --no-ff -m '版本信息' 分支名
bug 分支
在现实开发中,如果有 bug 需要修复,在 git 中可以使用分支解决。每一个 bug 都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
GitHub 的使用
创建仓库
Add .gitignore
:增加忽略文件或文件夹,一般用于忽略由于运行产生的中间文件。如 Python 程序产生的 pyc 文件等。
添加 ssh 账户
如果某台电脑需要与 GitHub 仓库进行交互就需要本台电脑的 ssh 公钥添加到 GitHub 账号上。
- 在本机生成 ssh 秘钥:
ssh-keygen -t rsa -C "123@126.com"
。 - 将用户目录下的
.ssh
文件夹下的id_rsa.pub
公钥添加在 GitHub 设置中。 - 验证是否添加成功:
ssh -T git@github.com
- 设置 username 和 email,因为 github 每次 commit 都会记录这些信息:
git config --global user.name "name"
//你的 GitHub 登陆名git config --global user.email "123@126.com"
//你的 GitHub 注册邮箱
克隆和上传项目
- 克隆:
git clone git@github.com:hzg0226/haha.git
- 上传:
git remote add origin git@github.com:hzg0226/hehe.git
推送和拉取代码
- 推送代码:
git push origin 分支名
- 拉取代码:
git pull origin 分支名