赞
踩
Git是一个免费开源的分布式版本控制软件,用以快速高效的处理从小型到大型项目的版本控制
git类似常见的软件如qq, 微信等软件,需要下载到电脑中进行使用
同一个文件创建多个版本,产生多个文件
本地存档,只有一个文件,但有多个版本
集中式的版本控制
分布式的版本控制
通过版本控制可以很好的实现对版本之间的切换,如在线上出现问题时排查问题代码
分布式相对于集中式去除了中心化,在集中式中每个客户端只能拿到一个版本,而分布式则可以拿到多个甚至全部的版本
集中式只能将某次的修改提交到服务端,分布式可以在本地进行提交,然后将多个提交统一提交到远端
git的安装主要有针对Linux, Win或者Mac系统,通过百度可以很简单的安装到本地,通过如下命令查看本地git版本
git --version
在第一次运行git,我们主要设置用户名和邮箱,操作如下
git config --global user.name "kunmzhao"
git config --global user.email "xxxxx@qq.com"
# 查看配置是否成功
git config --list
在git 中有2个权限文件
当前项目配置文件
配置文件路径为: git 项目的中.git文件下的config文件
该配置只对当前项目生效
全局配置文件
配置文件路径为 ~/.gitconfig
该配置对所有的项目生效
在上述添加用户名和密码中的--globa
l就是添加到全局配置文件中, 如果改成--loca
就会添加到本项目配置文件中
在后面的讲述中,我们可能需要将本地的代码推送到远端(例如GitHub),但是每次推送都会输入用户名和密码,这会很麻烦的
通过这种方式就可以通过SSH的方式进行git远端的操作
在本地电脑生成公钥
终端输入命令
ssh-keygen
# 然后一直点击回车键
找到生成的公钥
在目录下找到该公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDF6fXa8gnZN0SY+raGmQFhbEzvyMFqhkpe7JM6O11dZ/9H6W7d9sUphhPMRFEAart4BU70xZ0Ww6pHENhhZRWxmIa0od1uTtKC+bGKII2bcoJDfO8UQqUEeOjFsnlg1ulRKxM4l9L$0IVtKUIo0kKKgHw5SZbKHM8F+x1X1++KjuVepls5Cibu3Y9Cft1BnIabvVdTjUMllpG0w5FKS1eNFbtl77XFOMRB60IXz6BfnlJZkEVhDMpIpQd0kw3K5/yCnEF+eN6UDw1IPUrGivqUvQEeUMiXpbFUGJeZQxXIDIo13l+tUTWmqcQoxalC9WEW6DWbgmn1eytJFsrlPf1KNzNS6bFHx9WX06zYQz8pvau2Os6RbcyrTVNNe9dHXmtk9cAId7OsMhPsq+oWsPeoypIqpJGbFYuH3jjz/cJ45x6ehvFipXnRlmYewX1td+UDIavbMQ7LJx2mV2EuMsYGfx6w87cRDchxlLB1GUf9vBiVtzeTJ8056cL3+7YEF4ljU= kunmzhao@kunmzhaodeMacBook-Pro.local
将公钥拷贝到github中添加
该方式针对https方式下载的代码,下载之后在推送代码的时候需要输入用户名和密码,并且使用用户密码是无法登陆的
打开GitHub,生成token
将生成的token在登陆的时候作为密码进行验证
有时候我们不希望将项目中产生的中间文件进行git管理,可以通过.gitignore文件进行管控
在本地项目创建.gitignore文件
将需要忽略的文件写入该文件中即可
a.h
*.o
file/
!a.h
可以在在github中搜索gitignore,找到对应语言的gitignore
初始化git库
git init
克隆git仓库
git clone git@github.com:kunmzhao/dbhot.git
在本地添加远程仓地址
git remote add git@github.com:kunmzhao/dbhot.git
查看文件夹下所有文件的状态
git status
将新增文件或者修改的文件加入到git中进行管理
git add 文件名
git add . (管理 当前文件夹中未管理的所有文件)
将文件提交到本地
git commit -m "描述性信息"
tip:三种状态的变化
查看提交记录
# 查看所有的提交记录
git log
# 将提交记录简化为一行显示
git log --oneline
# 美化显示log
git log --pretty=oneline --graphy
# 显示详情操作记录
git reflog
查看修改
# 查看工作区做的修改
git diff
# 查看暂存区相对版本区做的修改
git diff --cached
# 查看两个版本之间的修改
git diff commitID1 commitID2
工作区回滚
git checkout x.py
git clean -df
```![<img src="picture/image-20220503193117913.png" alt="image-20220503193117913" style="zoom:50%;" />](https://img-blog.csdnimg.cn/e4366903356a440595a9be5b58769ac2.png)
暂存区回滚
```shell
git reset HEAD x.py
版本区回滚
版本区回滚到暂存区
版本区回滚到工作区(红色)
版本区回滚到工作区(透明色)
git reflog --(查看回滚的版本号)
git reset --hard (回滚的版本号) --> 回滚到之前回滚的状态
分支中每一个节点保留着相对上一个节点改变的内容,分支在git中是非常重要的,环境隔离使得多人协同开发称为可能
查看分支
# 查看本地分支
git branch --list
# 查看包括远程的所有分支
git branch --all
# 产看分支包括跟踪分支
git branch -vv
创建分支
git branch 分支名
切换分支
git checkout 分支名
# 在创建分支的同时切换分支
git checkout -b 分支名
删除分支
# 删除分支,该分支没有为合并的提交
git branch -d 分支名
# 删除分支,有未合并的分支也会删除
git branch -D 分支名
注意:删除一个分支的时候,必须切换到另外一个分支上
合并分支
# 将分支合并到当前分支
git merge 分支名
注意:先切换到要合并到的分支上去,再合并指定分支
冲突是在两个分支(要合并的)对同一个文件的同一行内容作了修改而产生的
解决办法如下:
rebase可以将git的提交记录变得简洁
合并多个提交记录
现状:希望将前三条记录合并为一条
git rebase -i HEAD~3
将上图修改为下图:
然后重新添加修改记录
最后结果如下图:
我们在合并分支时log会出现如下情况
如果在合并分支的时候希望主分支上仍是一条直线,可以用rebase代替merge,如下
通过rebase可以节省一次提交记录
3.如果忘记提交代代码
注意:在rebase中也是可能产生冲突的,解决方法如上所述
远程仓可以理解为某一个存放代码的服务器,市面上常见的有GitHub和GitLab等
我们以GitHub为例,学习一下自己创建远程仓
注册账号
创建仓库
推送本地代码到远程仓库
假如你本地已经有了一些代码,你希望上传到远程仓库
初始化代码目录:在本地代码目录的最外层执行
git init
配置git
# 创建用户名和邮箱
git config --global user.name "xxx"
git config --global user.email "xxx"
# 添加远程仓
git remote add origin git@github.com:kunmzhao/mytest.git
将本地代码推送到远程仓库
git push origin 分支名
# 完整命令
# 通常省略remote branchName,与local branchName 同名
# remoteName为我们一开始为远程仓配置的名字origin
git push <remoteName> <local branchName>:<remote branchName>
下载代码到本地
假如你希望从远程克隆代码
本地创建文件夹并初始化
git init
克隆代码
git clone git@github.com:kunmzhao/mytest.git
配置git
# 创建用户名和邮箱
git config --global user.name "xxx"
git config --global user.email "xxx"
# 添加远程仓
git remote add origin git@github.com:kunmzhao/mytest.git
推送代码
# 如果远程分支不存在就创建 git push 远程仓名字(origin) 本地分支名字:远程分支名字 # 如果希望远程分支和本地分支同名,命令如下 git push 远程仓名字(origin) 本地分支名字 # 如果希望将远程仓可本地仓建立联系,使得以后推送代码和拉去代码更简单 git branch -u 远端分支名字 # 可看跟踪分支情况 git branch -vv # 以后将本地分支推动到远端,命令如下 git push # 如果你想在本地创建一个分支跟踪远端的分支,命令如下 git checkout -b 分支名 远端分支名字
拉取代码
# 方式一:下载远程代码但不合并版本区的代码
# 将所有的远端分支进行更新
git fetch
# 将远端分支和本地分支合并
git merge
# 方式二: 下载远程代码并合并版本区代码
git pull
在github上找到开源项目
fork到自己账户下
在本地进行操作
Pull request到项目上去
1.issues:文档以及任务管理
2.wiki:项目文档
追溯历史
# 文件的创建日期,创建人等信息
git blame 文件名
# 追溯某n1-n2之间的代码
git blame -L n1,n2 文件名
堆栈保存
# 将本分支未提交的内容先缓存起来,后续再次恢复,常用在需要切换分支时使用
# 保存
git stash
# 查看保存
git stash list
# 恢复缓存
git stash pop
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。