GIT学习

目录

 

BASE INFORMATION

安装

创建版本库【repository】

添加文件到缓存区

掌握仓库当前状态

版本回退

git中的三个区

撤销修改

删除文件

添加到远程库

克隆一个本地库

分支管理

bug分支:

feature分支

多人协作

优化

打标签

PS:


BASE INFORMATION

创始人--Linux

竞品--cvs、svn 两者都是集中式版本控制系统,需要中央服务器集中存放版本库

git为分布式版本控制系统

学习网站 https://www.liaoxuefeng.com/wiki/896043488029600

安装:

1、安装完成先设置名字和Email地址

$ git config --global user.name "your name"

$ git config --global user.email "your email"

注:config【配置】 --global【表示这台机器所有仓库都用这个config】

创建版本库【repository】

1、创建空目录

$ mkdir 目录名 --创建一个目录

$ cd 目录名 --将当前目录移到新建的目录名下

$ pwd --显示当前目录

2、将创建的目录变成git可以管理的仓库:

$ git init -- init :初始化

添加文件到缓存区

$ git add 文件名  --预提交,可以写多个add,然后最后一起用一个commit,看注b

$ git commit -m "提交说明"

注:a.-m 后面接这次提交的说明,也是这个版本的描述信息

        b. $ git add a.txt

            $ git add b.txt

            $ commit -m "提交了两个文件a和b"

掌握仓库当前状态

$ git status【状态】 -- 包括:是否有添加到缓存区的改动、是否有改动的文件。如果目录增加了文本文件也会有提示,但是如果是文件夹则没有任何提示

$ git diff <文件名> -- 比较现在的文件和缓存区或者仓库里相同的文件有什么改动(若缓存区有相同文件则比较缓存区的否则比较仓库的;如果在文件的最后一行添加换行符(包括在后面增加另一行句子)则最后一句也视为被改动过)

版本回退

$ git log --pretty=oneline -- 查看所有版本历史,其中head指示的是当前版本。参数--pretty=oneline表示美化输出的信息,可以去掉

$ git reset --hard HEAD^ 或者 commit id 前几位 -- 回退到上一个版本或者commit id 对应的版本,并且工作区的内容也会跟着改变

$ git reflog -- 查看命令历史,可以找到所有版本的commit id

注:git log 与 git reflog 的区别:

1、git log查到的是每个commit id 的形成日期和作者,且只能看到当前版本往前的版本id,版本回退后,是看不到当前版本之后的版本信息的

2、git reflog 可以查看每一次commit id 的变动情况,且所有版本id都能查得到。

git中的三个区

工作区就是我们版本库所在的电脑的目录

stage是缓存区,$ git add . 文件就是添加到这里,有时也被称为index区

master是最终区,也是放置所有分支的区

$ cat <文件名> -- 展示的是工作区文件的内容

撤销修改

$ git checkout -- <文件名> -- 将工作区的文件恢复为跟缓存区或者版本库的一样(缓存区优先)

$ git reset HEAD <文件名> -- 把对应文件暂存区的修改撤销掉(unstage),工作区内容不改变(例如在reset之前你还在工作区添加了句子,该句子还依然存在)

删除文件

$ rm <文件名> -- 删除工作区中的文件 (此时库文件不会改变)

$ git rm <文件名> ,然后再 $ git commit -m "描述"  -- 将删除提交到缓存区,然后再commit到master,把master中的对应文件也删除

$ git checkout -- <文件名> -- 工作区文件被误删时,可以用来还原( 将工作区的文件恢复为跟缓存区或者版本库的一样)

猜想:$ cat 和 $ rm 都是对工作区的操作,$ git rm 是对版本库的操作,所以~~~

添加到远程库

1、创建、添加SSH Key(有了这个才可以推送东西到远程库)

在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

秘钥生成后复制id_rsa.pub(公钥)里面的内容到Github对应ssh秘钥的对应位置

2、链接到远程库

$ git remote add origin <远程库地址> -- 关联到远程库

$ git push -u origin master -- 将当前分支master推送到远程(第一次推送master时要加上-u参数,以后推送更改时直接写$ git push origin master便可)

remote -- 遥远地

克隆一个本地库

$ git clone 远程库ssh地址或者http地址 -- 将一个远程库完整地克隆到本地当前目录(此时本地库master与该远程库master已经自动关联了)

分支管理

$ git checkout -b dev -- 创建一个冰切换到名为dev的分支(注意与命令$ git checkout -- <文件名> 的区别),该命令相当于下面两个:

$ git branch dev

$ git checkout dev


$ git branch -- 查看分支列表

$ git merge dev -- 将dev分支合并到当前分支

$ git branch -d dev -- 删除dev分支


转换分支的另一种写法(这种最好):

$ git switch -c dev -- 创建并切换dev分支

$ git switch dev -- 切换分支


查看分支的合并情况:

$ git log --graph --pretty=oneline --abbrev-commit ------ graph 曲线图 abbrev 缩写,--abbrev-commit 就是让commit id 缩写的意思

注意:如果合并分支产生冲突时,并不会生成一个新的提交,但是工作区的文件会有改变,提示那里冲突了


禁用fast forward模式合并

$ git merge --no-ff -m "新提交的描述信息" <分支名字>

fast forward 模式的分支合并

也就是说禁用fast forward 模式会生成一个新的提交,新的commit id


在dev分支的时候add,切换到master分支时可以commit,也就是说dev分支add的内容可以到master分支commit

bug分支:

$ git stash -- 将工作区的改动以及缓存区的东西先用一个地方保存起来,保持working  tree的干净(可多次stash)

$ git stash list -- 查看stash列表

$ git stash apply stash@{0}-- 将stash的对应内容(stash@{0})恢复到工作区以及缓存区(如果不加参数stash@{}默认是恢复最近一条)

$ git stash drop -- 删除 stash储存的东西

$ git stash pop -- 上面两个命令的合体

$ git cherry-pick <commit id> -- 将commit id 提交所做的修改直接复制到当前分支(一般用在在master修复bug之后快速修复分支上相同的bug)

feature分支

$ git branch -D feature-valcan -- 强制删除还未被合并的名为feature-valcan的分支

多人协作

$ git push origin dev -- 将分支dev推送到远程库origin

$ git checkout -b dev origin/dev 创建远程origin的dev到本地

$ git pull -- 抓去远程库对应的文件

$ git branch --set-upstream-to=origin/dev dev -- 制定本地dev与远程dev间的链接

优化

$ git rebase -- 减少log分叉线

$ git config --global color.ui true -- 让git显示颜色,使输出更醒目 


忽略特殊文件

1、在git工作区的根目录下创建一个.gitignore文件,然后把要忽略的文件名字填进去,然后把.gitignore提交到git就行了

2、可以对.gitignore做版本管理

$ git add -f <文件名> -- 强制添加被忽略的文件

$ git check-ignore -v <文件名> -- 检查.gitignore中的<文件名>规则


配置别名

$ git config --global alias.st status -- 以后st就表示status

常用别名:

co==checkout

ci==commit

br==branch

$ git config --global alias.unstage 'reset HEAD'

$ git unstage test.py 就相当于 $ git reset HEAD test.py

$ git config --global alias.last 'log -1' ,此时 $ git last 就显示最近的一次提交了

$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"


每个仓库的Git配置文件都放在.git/config文件中,而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中,配置别名也可以直接修改这个文件。

打标签

1、切换到需要打标签的分支上

2、标签和commit挂钩

3、创建标签

$ git tag v1.0 -- 将标签1.0打到最新提交的commit 上

$ git tag -a v2.0 -m "version 0.1 released" f52c633 -- 将标签2.0打到id为f52c633的commit上。-a后面接标签名,-m后面接标签说明

4、标签操作

$ git tag -- 查看标签

$ git show v1.0 -- 查看标签1.0的信息 

 

$ git tag -d v1.0 -- 删除标签1.0

删除远程标签

$ git tag -d v1.0

$ git push origin  :refs/tags/v1.0

 

$ git push origin v1.0 -- 推送标签1.0到远程

$ git puh origin --tags -- 一次推送所有还没推送的本地标签到远程

 

 

PS:

a、不要用window自带的记事本编辑文件,因为在保存utf-8编码的文件时会自动在文件的开头添加0xefbbbf(十六进制的)字符

b、中汉互译

on branch master -- 在分枝主主枝上

 modified -- 修改

insertion -- 添加的东西 

deletion -- 减少的东西

commit -- 版本 n. (head指示的是当前版本)

commit id -- 可以翻译成版本号

untracked files -- 未追踪的文件 (应该是指还没有提交给仓库的文件)

master -- 主要的

pretty=oneline -- 美化=一条线

reflog -- 回流

working tree clean -- 表示工作区的更改已经commit到了分支上(如果仅仅只是add到缓存区,则还不能提示working tree clean)

Q:如何比较现在版本与上一个版本的不同?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值