一、什么是Git?
Git是一个版本控制工具,而且是一个开源的分布式版本控制工具。
二、Git基本配置
Git有三种配置,分别以文件的形式存放在三个不同的地方。可以在命令行中使用git config查看这些变量。
1、系统配置(对所有用户都适用)
存放在git的安装目录下:git config --system core.autocrlf
2、用户配置(只适用于该用户)
存放在用户目录下:git config --global user.name
3、仓库配置(只对当前项目有效)
存放在当前仓库工作目录的配置文件下:git config --local remote.origin.url
注:配置级别:仓库>用户>系统,每一个级别的配置都会覆盖上层级别的相同配置。
(一)配置个人身份
git config --global user.name “Zhang San”
git config --global user.email zhangsan.@××.com
注:这个配置信息会在Git仓库中提交的修改信息中体现,但和Git服务器认证使用的密码或公钥密码无关。
查看当前项目的用户/邮箱:
git config --global user.name
git config --global user.email
(二)文本换行符配置
Windows使用回车和换行(CRLF)两个字符来结束一行,而Mac和Linux只使用换行(LF)一个字符结束,避免扰乱跨平台协作。
Git可以在你提交时自动地把行结束符CRLF转换成LF,而在迁出代码时把LF转换为CRLF。
1、在Windows系统上:
git config --global core.autocrlf true
2、在Mac、Linux系统上:
git config --global core.autocrlf input
3、若是纯Window程序员,且正在开发仅在Windows上的项目,可以false取消功能:
git config --global core.autocrlf false
(三)文本编码配置
#中文编码支持
git config --global gui.encoding utf-8
git config --global i18n.commitencoding utf-8 # 用来让git commit log存储时,采用的编码
git config --global i18n.logoutputencoding utf-8 # 查看git log时,显示采用的编码
#显示中文路径
git config --global core.quotepath false
(四)与服务器的认证配置
1、http/https协议认证
设置口令缓存:
git config --global credential.helper store
添加HTTPS证书信任:
git config http.sslverify false
2、ssh协议认证
使用公钥认证,无需密码,加密传输,操作便利又保证安全性。
ssh认证的配置过程:
# 生成公钥:
ssh-keygen -t rsa -C zhangsan@××.com
连续三个回车,生成的私钥/公钥一般在用户目录的.ssh/id_rsa和.ssh/id_rsa.pub文件中。
# 添加公钥到代码平台:
登陆代码平台—>进入“Profile Settings”—>点击左侧栏的“SSH Keys”—>点击“Add SSH Key”,将公钥文件(id_rsa.pub)的内容,复制到“Public Key”栏,保存即可。
三、Git基本命令
Git版本控制下的3种工程区域和状态:
【1】区域:
版本库(Repository):在工作区中有一个隐藏目录.git,这个文件夹就是Git的版本库,里面存放了Git用来管理该工程的所有版本数据,也可以叫本地仓库。
工作区(Working Directory):日常工作的代码文件或者文档所在的文件夹。
暂存区(Stage):一般存放在工程根目录.git/index文件中,所以又把暂存区叫做索引(index)。
【2】状态:
已提交(committed):该文件已经被安全地保存在本地数据库中了。
已修改(modified):修改了某个文件,但还没提交。
已暂存(staged):把已修改的文件放在下次提交时要保存的清单中。
1、工程准备—git init & git clone
git init 项目/工程名
自动生成.git隐藏目录,存放着本项目的Git版本库。
git clone [URL] git lfs clone [URL]
用于克隆远端工程到本地磁盘。
lfs插件是对二进制文件进行区别管理,在确保项目git服务器已支持git-lfs前提下,使用lfs可以完整地下载工程中的二进制文件,否则内容不完整。
2、新增 删除 移动文件到暂存区—git add & git rm & git mv
git add 文件名
在提交该文件前,需要先将其add到暂存区,然后才能提交。
git rm 文件名
将该文件彻底从当前分支的缓存区删除,因此它从当前分支的下一次提交快照中被删除。
【也可以直接从硬盘上删除该文件,然后对该文件执行git commit操作,效果一样】
git mv file1.txt local ——(移动)将file1.txt移动到目录local下
git mv file1.txt file2.txt ——(重命名)将file1.txt重命名为file2.txt
3、查看工作区—git diff & git status
git diff
用于比较项目中任意两个版本(分支)的差异,也可以用来比较当前的索引和上次提交间的差异。
git status
用于显示工作目录和暂存区的状态。
4、提交更改的文件—git commit
git commit file_name -m "commit message"
git commit -am "commit message" ————一次性提交所有暂存区改动的文件到版本库
将暂存区的文件改动提交到本地版本库。
【注意】提交是本地动作,不会影响远端服务器。
提交成功后,git日志可以查到此次提交的id和描述信息——git log
5、查看日志—git log
git log
用于查看提交历史。
6、推送至远端仓库—git push
git push origin branch_name:new_branch_name ——本地分支可以与推送到远端的分支名不同。
在使用git commit 将自己的修改从暂存区提交到本地版本库后,可以使用git push将本地版本库的分支推送到远端服务器上对应的分支。
【注意】windows上分支名的大小写不敏感,避免推送到远端服务器造成分支覆盖。
7、分支管理—git branch & git chechout & git branch -d & git pull &git fetch
【1】查看分支
git branch ——查看本地工程的所有git分支名称。有*且高亮的分支表示当前工作区所在的分支。
git branch -r ——查看远端服务器上的分支,返回的分支名带origin前缀表示在远端。
git branch -a ——查看远端服务器和本地工程的所有分支。
【2】创建分支
git branch new_branch_name
git chechout -b new_branch_name
相同点:都可以创建新的分支(默认基于当前分支节点创建)。
区别点:git branch新建分支后不会切换到新分支,git checkout -b新建分支后自动切换到新分支。
【3】删除分支
git branch -d branch_name
git branch -D branch_name
都可以用来删除本地分支,大写表示强制删除。
git branch -d -r branch_name
git push origin : branch_name
可以删除服务器上的远程分支,注意 branch_name 是本地分支名。
删除后要推送到远端服务器才行。
【4】切换分支
git checkout branch_name
切换分支,官方叫法是“检出”。
git checkout -f
强制切换。
【5】拉取分支
git pull origin remote_branch:local_branch
从远端服务器获取某个分支的更新,再与本地指定分支进行自动合并。
git fetch origin remote_branch:local_branch
从远端服务器获取某个分支,符合预期后再手动进行合并。
8、合并分支—git merge & git rebase
git merge branch_name
用于从指定的分支(节点)合并到当前分支的操作。
git rebase branch_name
【注意】二者背后实现机制,以及合并后对当前节点造成的影响各不相同,有各自的风险存在。
9、撤销操作
git reset commit_id
用于撤销当前工作区中的某些 git add/commit 操作。
git checkout .
用于回退本地所有修改而未提交的文件内容。
【注意】它不给用户任何确认机会,谨慎使用。
git checkout -filename ——仅仅回退filename文件中未提交的改动