最近实习的时候用到了git版本控制,自己之前也学到过,后来时间太长,自己也没整理,就都忘记了,现在自己重新学一遍,进行整理,有不对的地方欢迎各位指证。
首先说一些废话,介绍一下git是什么,git是一个分布式版本控制系统,可以有效,高速的处理从很小到非常大的项目版本管理。
为什么需要版本控制呢?你试想一下,你如果写一个word文档,突然发现写错了或者删除一个段落,你会先复制一份,然后修改,再另存为,这样反反复复下去,等你需要找回你修改的段落,你会发现你不知道哪个文档是你最开始修改的。还有一种是你的同时需要修改你的文件,你自己也在修改,最后需要将整个文档整合起来,会不会觉得很麻烦,有了git这些问题都可以轻松的解决。
接下来说一说如何在windows上安装Git
点击安装git
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装成功后需输入:
$ git config --global user.name “Your Name”
$ git config --global user.email “邮箱”
然后创建自己的版本库
新建一个git-space目录,作为自己的根目录。创建一个空的目录maomao,进行初始化,把这个目录变成Git可管理的仓库。
编写一个a.txt 内容是
然后使用git add 命令和git commit命令 将a.txt文件从工作区提交到暂存区
提交后可以利用git status查看状态
表示当前工作区是干净的,没有需要提交的文件。
你如果反反复复修改文件,可以利用git log命令查看修改的记录
如果嫌输出信息太多,可以使用git log --pretty=oneline命令
前面的ca3等是版本号。
如果我们想回到上一版本应该怎么办呢?
这个问题首先我们需要知道我们目前所在的版本,在git中,用head表示当前版本,上一个版本就是head^ ,上两个就是head^^ 如果太多就用head数字,例如上50个版本,就用head50表示
例如:回到second
用git log查看历史发现third commit已经不见了
这时如果你想回到下一版本,使用git reset --hard +commit id(也就是版本号)
还有一种情况,就是你回退到一个版本,关机了,第二天又想回到后一版本,你又找不到commit id怎么办呢,这时git提供了git reflog命令来记录每次版本的改变
如果你编辑后,还没执行add操作,突然想起来想删除一段,可以执行git checkout – 文件名称
当然 如果你执行了add操作,还没执行commit操作,可以使用命令git reset HEAD 文件名称
远程仓库
在github上申请一个账号,创建一个仓库,然后将本地仓库和远程仓库关联执行命令
git remote add origin +你远程仓库的地址
然后执行push操作,将你本地的代码传到github上
在此之前 ,需要先申请ssh**
$ ssh-****** -t rsa -C “你刚开始的邮箱”
然后再github上点击settings,将.pub结尾的文件里面的内容全部拷贝到settings里面的new SSh key就ok了
从远程库克隆
$ git clone [email protected]:xiumaomao/仓库名称.git
创建分支
一开始的时候master就是一条分支,是主分支,git用master指向最新的提交,再用head指向master,这样就能确定当前分支。当我们创建一个新的分支的时候,例如pro,git会创建一个新的指针,再把head指向pro,这样就表示当前分支在pro上。
创建一个pro分支,git branch pro
切换到pro分支,git checkout pro
编辑a.txt,在结尾添加一行edit by pro
然后执行add commit操作,最后切换为master分支,用cat a.txt命令查看a.txt,会发现文件没有添加内容,那是因为master分支是指向前一次的提交,因此需要将分支合并,git merge操作,然后删除pro分支就可以了。
分支操作的一些基本命令:
查看分支:git branch
创建分支:git branch 分支名称
切换分支:git checkout 分支名称
创建+切换分支:git checkout -b 分支名称
合并某分支到当前分支:git merge 分支名称
删除分支:git branch -d 分支名称
有一种情况就是当你自己手上的工作还没完成的时候,这时你的上司说这里有一个bug需要你立即处理,没办法,你手上工作又没完成,怎么办呢?
这时可以使用git stash命令,先把工作区间保存起来,等你手上的bug处理完之后,再用git stash pop命令再回到工作现场
建议:
开发一个新功能,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 分支名称 强行删除。
目前就先整理这么多,不对的地方希望各位能够指正