工作中对于项目的管理主要是基于git的,学习git还是很重要的。。。。。。
Git的特点
- Git是分布式版本控制系统
- git的底层是用C来实现的
Git相关参数的配置 用来指定自己的机器
git config --global user.name “Your Name"
git config --global user.email “Your email"
Git仓库的建立
mkdir path/filename
cd paht/filename
git init
通过以上操作,就可以将本地的一个目录声明为git仓库,可以通过ls -a来查看当前目录下是否有.git隐藏文件,该文件是用来跟踪和管理版本库的,不可乱动。
关于基本操作
touch filename
git add filename //将filename添加到当前的仓库内
git commit -m “tps” //将添加到仓库内的文件提交到仓库内,其中tips是用来标记本次提交的提示信息 可以多次add然后一次commit
git status //用来显示当前仓库的状态,例如修改了当前的某个文件但是还未提交,就会提示修改了其中的某个文件
git diff filename //用来显示当前文件与之前的文件有哪些区别
git log //用来显示从最近到最远的提交日志
git reset —-hard HEAD~num //用来会退到之前的某个版本
git reset —-hard commit_id //用来定位到某个确定的时间点
git reflog //可以用来查看历史的每一次命令,同时可以查看对应的commit id
- git log可以用来查看从当前时间点开始的所有commit的id,一般只需要前几位就可以
- 当使用git reset之后,git log的输出结果也会产生变化,也就是说会导致如果后悔某次的回退操作,就会导致无法使用git log来查找到相关的commit id来进行回退
git库可以分为两个部分,一个为工作区,一个为版本库。其中版本库分为暂存区和分支区。
- 使用git add 操作就是将对应的file加入到暂存区
- 使用git commit就是将对应的节点加入到分支区
例如,对于ReadMe.txt文件,先对其进行修改,然后使用git add将其加入到暂存区内,然后再次修改ReadMe.txt文件,这时使用git commit命令将暂存区内的文件提交到分支区,此时只有第一次修改的内容会被提交,第二次修改的内容则不会被提交;如果想要提交第二次修改的内容,则需要重新执行git add,将第二次修改的内容添加到暂存区,同时执行git commit将其提交
git checkout —- filename //将工作区内文件的修改进行撤销
- 如果对于此文件,还未添加到暂存区,则将分支区内的内容还原给工作区
- 如果对于此文件,已经添加到了暂存区,则将暂存区的内容还原给工作区
git reset HEAD filename //可以将暂存区内的修改撤销,并回退到工作区
注意以上几种撤销之间的区别:
- git reset —hard HEAD/commit_id 此命令使用来将工作区内的内容还原成分之区对应的节点
- git checkout -- filename 此命令是对工作区的修改进行撤销,需要判断暂存区内有无添加,是对应单个文件来说的
- git reset HEAD filename 此命令是将暂存区的添加内容进行删除,是对应单个文件,而且是针对暂存区的内容
- git rm + git commit可以用来删除分支区内的对应内容
如果使用rm删除本地的相关内容之后的确要进行删除,则可以使用以上的命令来确定操作
如果不是要进行删除,则可以采用git checkout —- filename命令将版本库内的内容还原到工作区
通过将本地库与github上的库相关联实现分布式控制,github上的库与本地的库之间进行传输采用的是ssh加密的方式。即本地库的私钥和hub的公钥钥进行配对。
ssh-keygen -t rsa -C "youremail@example.com” //用来生成对应的公钥和私钥
上述命令可以在.ssh目录下生成两个文件,id_rsa和id_rsa.pub两个文件,分别表示一对私钥和公钥,其中公钥需要添加到github仓库中,这样的话,只有具有对应的私钥的用户才可以对项目中的内容进行修改。
- 在本地的仓库执行以下命令,可以将本地仓库与hub上的仓库进行绑定
git remote add origin git@github.com:<yourid>/<name.git> //origin表示远程库的名字,一般默认情况下使用这个名字 <yourid>表示你的github名称 <name.git>用来表示与本地仓库相绑定的仓库
- 在本地仓库执行以下命令,将本地仓库的内容推送到远程库上
git push -u origin master //origin表示需要推送的远程库的名称 master表示需要推送到的分支 -u表示第一次添加时将本地的master分支推送到远程库的master分支,还会将本地的master分支与远程库的master分支相关联
git push origin master //将本地的master推送到远程库中与其对应的分支上
- 将远程库clone到本地库
git clone git@github.com:<yourid>/<name.git> //将远程库拷贝到本地库
关于分支
所谓分支,就是一段时间链,每个节点保存了对应提交的内容,而HEAD默认是指向了master,master是一个指针,指向了主链的最新节点。
- 创建并切换分支
git checkout -b dev //创建dev分支并切换到dev分支,所谓创建就是新建了一个dev指针指向当前的最新节点,所谓切换就是将HEAD转而指向dev指针
此指令相当于
git branch dev //创建dev分支
git checkout dev //切换到dev分支
使用git branch来显示当前库内包含的分支
当前分支前会有*标注
- 合并分支
git merge <branchname> //将<branchname>指向的分支合并到当前分支
- 禁止使用Fast Foward模式
git merge —no-ff -m “tip” <branchname> //通过禁止使用Fast Foward模式,可以在删除分支后保留分支的信息
- 删除分支
git branch -d <branchname> //将<branchname>指向的分支删除
- 查看分支图
git log --graph //使用此命令可以查看分支变化图
- 保存当前的工作信息
git stash //此命令可以将当前分支的内容压栈进行保存,然后就可以切换到其他的分支
对于 git push origin master这种,可能会产生冲突,此时可以先采用git pull将库的内容拉下来,然后在本地解决冲突之后再进行push操作。
- 合并多人协作的冲突
git Rebase
关于标签
git tag <tagname> //可以为最近的commit打上标签
git tag //可以显示当前的所有tag
git tag <tagname> commit_id //为指定的commit打上标签
git tag -a <tagname> -m “tip” commit_id //为指定的commit打上标签和说明性的文字
git show <tagname> //显示指定tag的说明性文字