git

Git 简介
Git (wiki: en chs )是一个免费开源的分布式版本控制系统,由linux内核作者linus Torvalds开发,大型开源项目linux kernel、Android、chromium、mono、dotnet、UE4等都使用Git管理项目
Git是目前世界上最先进的分布式版本控制系统(没有之一)。git 是版本控制工具。

一 git安装与配置
1 安装
windows 安装 https://git-scm.com/downloads
Linux安装 sudo apt-get install gitit
2 配置
git config --global user.name “Your Name” //配置用户名
git config --global user.email “email@example.com” //配置邮箱
git config --global core.editor vim // 配置默认文本编辑器,当Git 需要你输入信息时会调用它
git config --global alias.st status // 为status配置别名st,这样git status就可以写成git st
git config --list // 查看当前仓库的所有配置信息(包括分支相关的信息)
git config user.name // 查看当前仓库的用户名信息
git config -e --global // 编辑全局配置文件(用户名和e-mail信息就记录在其中) 所在目录:c:/users/<用户名>/.gitconfig
git config -e // 编辑当前仓库的配置文件 所在目录:.git\config

二 工作区 暂存区 版本库
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

三 git基本流程操作
1 版本库初始化
git init //在当前目录下创建版本库

2 将文件到暂存区
git add file //将该目录下file文件添加到暂存区
git add . // 将当前目录下(递归子目录)所有文件加入到暂存区
git add Doc/*.txt // 将当前目录的Doc文件夹下(递归子目录)所有txt后缀的文件加入到暂存区
git status // 查看当前所处的分支暂存区和工作区的文件(会显示当前所处分支)
注1:处于暂存区的文件状态::staged(已暂存);处于工作区的文件状态::untrack(未跟踪)、modified(已修改)
注2:工作区中的空目录不会被git追踪
git diff HEAD – filename //可以查看某一个文件在工作区和版本库里面最新版本的区别
3 暂存区提交版本库
git commit -m “desc” // 添加desc注释并将暂存区中的所有修改提交到本地仓库
git commit README.md -m “desc” // 添加desc注释并将暂存区中的README.md的修改提交到本地仓库

4 查看版本提交日志
git log // 查看本地版本库提交记录(会显示当前所处分支,HEAD指针指向哪个分支的哪条提交)
git log --stat//查看本地版本库提交记录(会显示当前所处分支,HEAD指针指向哪个分支的哪条提交和每次提交的文件变更简略统计信息)
git reflog //可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

5 历史版本回退
(1)git reset –hard HEAD^ //如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。
(2)git reset –hard 版本号 //版本号只需输入前几位 git会自动寻找匹配
获取版本号,可通过git log进行查看所有提交的版本日志,如果回退过很多次想要在回退的版本里进行回退,可使用git reflog进行查看所有日志
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
(3)git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本

三 文件修改
你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
1 文件修改提交机制
如果当前file修改以后进行了gti add操作,那么暂存区只会只会记住当前提交时状态,如果后面又进行了修改必须再次进行add操作。
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
2 文件撤销修改
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
3 文件删除
一般情况下,直接在文件管理器中把没用的文件删了,或者用rm命令进行删除
rm filename
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了
(1) 从版本库删除文件
git rm filename //删除文件
git commit //重新提交版本
(2)把误删的文件恢复到最新版本
git checkout – filename //从版本库恢复文件
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

四 git分支管理
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险
1 分支基本操作
git branch dev //创建一个分支dev
git checkout dev //切换分支dev
git checkout -b dev //创建一个分支 dev 并切换
git branch //查看所有分支 当前分支前面会标一个*号
git branch -r //查看远程所有分支
git branch -a //查看本地和远程的所有分支
git merge dev //合并dev分支到当前分支
git branch -d dev //删除dev分支
git branch -m //重命名本地分支
2 远程仓库
github(https://github.com/)和gitlab(https://about.gitlab.com/)都是基于git仓库的web开发流程代码托管平台。两者的区别是github有私有仓库和共有仓库,私有仓库一般收费,gitlab打破这种限制,可以免费搭建私有仓库,并且可以部署在自己的服务器上。gitlab不仅有github的功能,还有更多的优秀特性,比如权限设置。一般企业内部软件产品用gitlab是更好的选择,如果是开源产品,一般放在github上。
码云(https://gitee.com/enterprises?from=tg-6-7)是开源中国社区推出的基于git的代码托管服务平台,基于gitlab。目前招商银行,中国科学技术大学,CSDN等多家企业和机构都在使用码云平台。
3 关联远程仓库 码云
(1) ssh-keygen -t rsa -C “xxxxx@xxxxx.com” //在本地生成公钥 后面为码云注册邮箱
按照提示完成三次回车,即可生成 ssh key。通过查看 ~/.ssh/id_rsa.pub 文件内容,获取到你的 public key
cat ~/.ssh/id_rsa.pub //查看公钥
(2) 复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,添加生成的 public key 添加到仓库中。
(3) 本地输入 ssh -T git@gitee.com 首次使用需要确认并添加主机到本机SSH可信列表
4 远程库操作
git clone git地址 //克隆远程项目
git remote // 查看远程仓库名称 一般为origin
git remote rename origin test // 将远程仓库名称从origin修改为test
git remote show origin // 显示远程仓库的信息
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,
git push origin master
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :refs/for/master
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
git push origin
  如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push
 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名
git fetch origin master //从远程主机的master分支拉取最新内容
git merge FETCH_HEAD //将拉取下来的最新内容合并到当前所在的分支中
git pull <远程主机名> <远程分支名>:<本地分支名>

如果远程新建了一个分支,本地没有该分支。
git checkout --track origin/branch_name

如果本地新建了一个分支 branch_name,但是在远程没有。
git push --set-upstream origin branch_name

Git在本地新建分支后,必须要做远程分支关联。关联目的是如果在本地分支下进行git pull 和 git push操作时 ,不需要指定在命令行指定远程的分支.
git branch --set-upstream-to=origin/remote_branch your_branch
其中,origin/remote_branch是你本地分支对应的远程分支;your_branch是你当前的本地分支。

五 git标签管理
通常,发布一个版本时,会在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
简单理解:标签是某个版本的别名,因为Git的版本号都是用一串字母数字组成,为了便于管理,Git 可以给版本取个别名(也就是打上标签,比如标签的名字叫做 v1.0.0)。

git tag //查看所有标签
git tag //创建一个标签
默认标签是打在最新提交的commit上的。但是,如果需要对过去的提交的版本打上标签,怎么操作?
git log --pretty=oneline --abbrev-commit //查看所有commid
git tag //git tag v0.5.0 6a691d8
git show 查看标签信息 根据commid进行回退版本
git tag -d 删除标签

git push origin 推送标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d
git push origin :refs/tags/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值