git使用(git命令)
1. git介绍
- git 是对文件进行版本管理,解决代码版本管理问题,代码合并问题。(多人协同开发,合并代码)
- git:是分布式管理,控制的对象是开发的项目代码。每个客户端都能进行版本管理(每一个节点都有客户端和服务端)
- svn:集中管理,它分客户端和服务端,只能依附于服务端进行版本管理(必须都要提到服务端上去)
2. git安装
官网地址:https://git-scm.com/download/win
安装时一路点击下一步,安装完后点右键会看到多出两个git菜单,说明安装成功了。
3.
- git:是一种版本控制系统,版本管理软件,是一种工具
- github:全球最大的开源代码仓库。是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费
- gitee:码云,国产版github,中国最大的开源代码托管平台。支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费。
- gitlab:是一个 基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发
4. git工作流程
- 工作区 暂存区 版本库
- 工作区修改的内容(删除,新增,修改)---> 提交到暂存区---> 提交到版本库
- 从版本库到服务器版本库最重要的两个步骤:提交和拉取 完成本地与服务器代码同步
- 所有开发者与服务器同步。就代表所有开发者间接代码同步,团队开发
-
git init # 创建git仓库
git status # 红色,绿色,没有变化
git add . # 把工作区发生变化的提交到暂存区
git commit -m '注释' # 把暂存区所有的数据提交到版本库
git log # 查看日志,查看版本变化的日志
git reflog # 查看日志,以简略形式显示日志 -
git checkout . # 恢复工作区的更改:慎用!
git reset HEAD # 把暂存区更改拉回到工作区:少用
git reset --hard 版本号 # 把工作区内容变成某个版本
工作区:开发程序代码的,创建、编写、删除文件 # 工作区提交到暂存区 git add . 暂存区:内存中临时存储 # 暂存区提交版本库 git commit -m '提交的信息注释' 版本库:本地开发的代码 # 版本回滚 git reset --hard 版本号 服务器版本库:远程参考,服务器共用的代码
5. git基本命令
# 1 创建出一个工作区,在里面操作文件 初始化:git init 文件夹名 # 初始化仓库,以后这个文件夹就被git管理了,生成一个隐藏的.git文件夹
(如果没有这个文件夹,该命令就是在目录中创建新的 Git 仓库。即生成一个空文件夹,并且里面带.git文件夹)
初始化:git init # 不带文件夹,当前路径全被管理 # 2 查看状态 git status -红色表示变化了,没有提交到暂存区。 # 比如修改了dev.txt文件,还未提交到暂存区,会显示红色的modified:dev.txt -绿色表示在暂存区,没有提交到版本库 -如果没有变化,表示所有代码被版本管理了 # 红色表示未被管理 # 绿色表示提交到暂存区了
# 3 从工作区,提交到暂存区 git add s1.py # 只提交s1.py 到暂存区 git add . # 把工作区所有更改都提交到暂存区
# 4 把暂存区提交到版本库 git commit -m '注释' # m是message # 5 查看日志 git log # 查看版本变化的日志 git reflog # 查看到所有历史版本信息
注意:git log 和 git reflog的区别
git log 命令可以显示所有提交过的版本信息,如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息
git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
# 6 恢复到某个版本(用的比较多) git reset --hard 版本号 # 版本号通过可以获得,恢复的时候只需要版本号前面几个字母就可获得 # 7 把工作区的内容恢复到版本最后状态(回滚到版本最新的记录) git checkout . ''' 把a.txt的新增提交到版本管理, 新建b.txt,在a中再添加一行记录 当输入git checkout . 文件会怎么变? ''' 恢复到提交版本的位置,a就是空的了,b因为没有被git管理(新增的时候没有被记录),所以操作不了它,它原来是什么样还是什么样,即现在看到两个空的a和b # git reset HEAD . 这个用的比较少,是从暂存区拉回来
# 8 空文件夹不会被git管理,里面一定要有文件才会被管理
# 9 设置用户和邮箱(增加作者信息) 全局: git config --global user.name '用户名' git config --global user.email '用户邮箱' # 在用户家路径的.gitconfig这可以看到 局部: git config user.name '用户名' git config user.email '用户邮箱' # 在当前仓库的.git 文件夹下config # 局部有,优先用局部用户信息,局部没有,用全局的 # 10 写了一堆东西,没有提交到版本库(没有被版本管理起来),删掉之后,git checkout . 也不会有,因为它没有记录,所以要先提交到版本库。
6. 忽略文件(过滤文件)
- Git工作目录中,有些文件必须要有,但又不能提交它们,不想被被git管理,就可以设置忽略文件
- 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名放进去,Git就会自动忽略这些文件
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤 /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤 * 代表任意字符 ? 代表一个字符 # python中一般忽略文件:.idea /logs/*.log /script __pycache__ 等
# 忽略之后就会变黄了
eg: a.txt:项目中所有a.txt文件和文件夹都会被过滤 /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤 /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤 *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符) 空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件) a.tx? :?表示一个字符 a.txt a.txx
7. git分支
一般公司 主分支master只用来发版,从主分支拉出来一条dev开发分支,开发就在dev分支上去操作,提也是提到dev分支上,master分支不会受影响,主分支不需要记录开发的过程。等要上线一个新功能,再合并到master主分支,然后再发到服务器上。
冲突1:
从主分支上拉下dev分支后,主分支上也修改提交了一些东西,然后dev分支又去合到主分支,这时候分支合并可能就会出冲突。从master分支上拉dev分支的时候,最好工作区所有内容都被版本管理起来后再拉分支,然后再操作。如果还有很多东西没有提交,就开始拉分支,这就乱套了。
# 在master分支上 git status 查看没有其他颜色,说明已经都被管理了。 # 要删除dev分支,要切到master上,在dev分支上无法删除自己 # 创建分支 git branch 分支名 git branch dev # 创建一个dev分支
# 查看分支 git branch # 星号 在绿色的分支名 代表目前在这个分支上
# 切换分支 git checkout master # 切换到master分支(此时后面dev分支操作的看不到) git checkout dev # 切换到dev分支(dev操作的东西又能看到了) # 合并分支(重点!) git merge dev # 把dev合并到master,先切换到master上(git checkout master) ''' 这里不要把master合到dev上去了,要是合反了退回去再重新合。每合一次会生成一个新版本,可以切换到这个版本上,再从这个版本上重新合。以上操作都会有记录) 可以先git branch查看在哪个分支上 , 确保是在master分支上 ''' # 删除分支 git branch -d dev # 删除dev分支要先切到master分支上 git checkout master。 !!!千万注意不要把maser分支删掉了 # 补充linux常用命令: cd 目录名: 切换到某目录下 mkdir a: 在当前工作目录下创建a文件夹 touch dev.txt :新建dev.txt文件 vi dev.txt:进入一般模式,按i进入输入模式,可以输入内容 (在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示) 按ESC按钮回到一般模式,再按:wq存储后离开vi :q,是不保存退出。 :q!是不保存强制退出 rm -rf a: 删除a及a目录下所有文件,并且不用确认
8. 远程仓库
# 也可以使用github 或 gitlab(公司自己内部搭了一个gitee) # 这里用gitee作为远程仓库 # 在gitee上创建一个空的远程仓库。 不需要勾选点初始化仓库,设置模板,选择分支模型这些,就直接点创建就好了。不用初始化readme文件,这些都自己弄。 # 设置账号和邮箱(git全局设置) git config --global user.name "tutu" git config --global user.email "123@qq.com" # 如果本地没有仓库,创建git仓库 mkdir test cd test git init touch README.md git add README.md git commit -m "first commit" # 添加远程仓库 (连接远程仓库,只需要做一次,以后只需要操作push和pull)
设置远程仓库:
git remote add origin 仓库地址(https/ssh)
eg: git remote add origin https://gitee.com/xx/test.git # origin是给远程仓库起的名字
# 把本地的master,提交到远程origin仓库。
(需要输入用户名密码,正常情况,只需要输入一次,以后就保存了)
git push origin master # 把master分支推到远程仓库 可以按tab键自动补齐
''' 首次推的时候,会跳出来要求输入gitee的用户名和密码,然后就会保存到电脑凭据里,以后再提就不需要输了。 控制面板--用户账户--凭据管理器--Windows凭据 (只要添加过一次,就会永久保存在本地) ''' # 如果本地有仓库 cd existing_git_repo git remote add origin https://gitee.com/xx/test # https是仓库地址 git push origin master # 查看本地设置的远程仓库 git remote # 删除本地设置的远程仓库 git remote remove origin 远程仓库名字 # 从远程仓库拉取代码 git pull origin master # 从远程的origin拉到本地的master # 注意:增加了远程仓库,最开始只需要新增一个远程仓库,以后只需要pull拉取代码,和push推送本地代码到远程
9. ssh连接远程(公司常用)
# 推送和下载,使用https协议,需要输入用户名,密码的方式 # 现在使用ssh连接远程
不需要再输入用户名密码,但是需要配置公钥私钥(非对称加密)
本机生成公钥私钥(操作系统使用命令)
公钥配置在自己的远程仓库
# 删除之前的https的origin远程源,再增加一个ssh的,增加命令: git remote add orgin 仓库地址(ssh)
git push origin master # 往上推代码
git pull origin master # 往下拉代码
'''
如果公司用的是gitlab,需要有一个gitlab账号,可能是领导注册好了(自己去修改密码),或者是自己去注册,公司内网有个地址去注册一下。
然后在本地生成公钥和私钥,把公钥配置进去,配置的位置和gitee差不多。
配上之后,以后拉代码和提代码就不需要输用户名和密码了
'''