linux
git:查看是否已经安装
sudo apt-get install git :安装
git init:将一个普通目录变成版本库
设置github用户名和邮箱
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
git add filename :将文件添加到缓存区
git commit -m "注释" :提交文件到版本库【仓库】
git status:查看仓库当前的状态
git diff filename:查看仓库具体的改动
版本回退
工作原理:每当修改一个文件,并且使用commit提交之后,其实就相当于保存了一个快照
需求:回退到上一个版本
补充:要回退版本,首先需要知道当前处于哪个版本,在git中,用HEAD表示当前版本,上一个版本是HEAD^,上上个版本是HEAD^^,如果向上找100个版本,则表示为HEAD~100
git reset --hard 版本号【commit id】
总结:
HEAD指向的是当前版本,所以,git在历史的版本之间来回切换,使用git reset --hard commit id
切换版本前,可以使用git log查看提交历史记录,以便于确定回到哪个历史版本
要重返未来,用git reflog查看历史执行过的git操作,从上往下寻找第一个commit的操作,则是未来的最新的版本
工作区和暂存区
工作区:working Driectory,就是你电脑中的能看到的目录【python1805】
版本库:工作区中有一个隐藏的目录.git,该目录就是git中的版本库
版本库中存放了很多的数据,其中包括暂存区【缓存区,stage或者index】,还有git为我们自动创建的第一个分支master【主分支】,以及指向master的一个指针HEAD
往git版本库中添加文件,分为两步:
a.git add,实际是将文件添加到暂存区中
b.git commit .实际是将暂存区的文件提交到当前分支【主分支】
撤销修改
a.修改了文件内容,但是还没有添加到暂存区(没有add,没有commit)
b.不但修改了内容,还添加到了暂存区,但是还没有提交(add了,没有commit)
c.直接将修改的内容提交到了版本库(add并且commit了)
实质:版本回退
删除文件
在git中,删除文件也是一个修改操作
远程仓库
建立远程仓库的准备工作
步骤:
a.创建github账号
b.生成ssh key【秘钥,建立本地和网络之间的连接】
命令:ssh-keygen -t rsa -C "github的注册邮箱"
c.添加到github
settings--ssh and GPG keys--new ssh key
d.检测是否添加成功
命令:ssh -T [email protected]
将本地仓库和远程仓库联系起来
先建立远程库new repository
总结:
要关联一个远程仓库,使用命令 git remote add origin [email protected]:username/repoName.git
关联成功之后 ,使用命令git push -u origin master第一次推送master分支的内容到远程仓库
以后,每次本地提交之后,只需要使用命令git push origin master推送最新的修改【本地修改----》add到暂存区---》commit到本地仓库----》push到远程仓库】
从远程仓库克隆
git clone [email protected]:username/repoName.git
分支管理
6.1.创建和合并分支
总结:
git鼓励大量使用分支
查看分支:git branch
创建分支:git checkout -b name 【-b创建分支并且同时切换到子分支下】
切换分支:git checkout name
合并某个子分支到当前分支:git merge name
删除分支:git branch -d name
解决冲突
总结:
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图
分支合并策略
合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
总结:
master分支应该是非常稳定的,仅仅使用master分支发布版本,平时不在上面干活
比如:每个人都在dev的分支上干活,每个人都有自己的分支,时不时的向dev上合并代码就可以了
比如:发布1.0版本,再把dev上的代码合并到master上面
合并分支时,加上--no-ff参数表示使用普通模式进行合并,合并之后可以查看历史 记录,而Fast-Forword快速模式没有历史记录
bug分支
一般情况下,每个bug都需要使用一个分支来进行解决,解决后,分支删除
git stash:可以把当前工作现场储存起来,然后先进行其他额的工作,完成工作之后,可以解封继续工作
总结:
修复bug时,创建一个新的分支,进行bug的修复,然后合并,最后删除
当手头的工作没有完成的时候,使用git stash 将内容封存,然后取修复bug,当bug修复完成之后,则使用命令git stash pop解封
feature分支
总结:
每开发一个新的功能【版本迭代】,最好新建一个分支来进行操作
如果需要丢弃一个还没有被合并的分支,使用命令 git branch -D branch-name
多人协作
当你从远程仓克隆时,实际上git将本地的master和远程的master对应起来了,并且远程仓库的默认的名字为origin
推送分支
推送分支:把该分支上的所有的本地提交推送到远程库,推送时,要指定本地分支
总结:
并不是所有的分支都需要推送到远程仓库
a.master分支时主分支,因此要时刻与远程保持同步
b.dev是一个开发分支,团队所有的成员都在上面工作,所以也需要推送到远程仓库
c.bug分支只是修复一个bug,就没必要推送到远程
抓取分支(需要公钥)
总结:
a.查看远程库的信息,使用git remote -v
b.本地新建的分支如果不推送到远程,对其他人都是不可见的
c.从本地推送分支,使用命令git push origin branchname,如果推送失败,则先用git pull抓取
d.在本地创建于远程分支的连接,使用命令git checkout -b branchname origin/branchname
e.从远程抓取分支,使用git pull,如果有冲突,则要先解决冲突
标签管理
创建标签
操作标签
git tag v1.0 #创建标签,默认创建的是当前最新提交的标签
git tag v0.2 ae20ec5 #为指定commit id创建标签
git show v1.0 #查看指定标签的详细信息
git tag -a v0.1 -m "version 0.1" e7423195 #创建标签,携带标签的描述信息
git tag #查看当前分支下的标签
git push origin --tags #将本地仓库中的标签推送到远程仓库
git tag -d v0.2 #删除本地仓库中的标签
git push origin :refs/tags/v0.2To #删除远程仓库中的指定标签