git是什么
git是一个分布式版本控制系统,与SVN会有显著的区别SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。而git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,使用的时候就把各自修改的部分推送给别人。
git的操作
1、版本库的创建,文件的上传
首先可以通过git init
把当前的目录变成git可以管理的仓库。然后可以把文件添加到版本库中去,这里添加的文件只能跟踪文本文件比如txt文件、网页、程序代码等而像图片、视频这些二进制文件只能把他们串起来,就是知道文件大小的变化,但是无法知道具体内容的改变。比如我们要添加的文件是readme.txt,就使用git add readme.txt
可以将文件添加到暂存区里面,这时如果没有提示就说明已经添加成功了,接着使用git commit
告诉git把文件提交到仓库也叫当前分支,提交完之后可以使用git status
来查看是否有文件未提交,如果我们想查看文件修改了什么内容,可以使用git diff readme.txt
运行后会返回文件修改的情况。
2、版本回退
当我们对文件进行了多次修改如果想要查看历史记录可以使用git log
他会从最近到最远显示日志,如果信息过多,可以使用git log -pretty=oneline
就会只返回精简的信息提示。打印出日志之后我们可以进行信息的回退,可以使用git reset --hard HEAD^
回退到上一个版本,如果要回退到上上个版本只用改成git reset --hard HEAD^^
以此类推,这种指令不适合回退到几十个版本之前,所以如果要回退几十个或者100个版本可以使用git reset --hard HEAD~100
。回退后使用git log
就看不到回退之前的版本了,所以如果我们反悔了想要回到之前最新的版本就可以先使用git reflog
获得不同时期的版本号,找到我们要回到的版本的版本号,比如是6bsiwy1,那么找到这个版本号之后我们再执行git reset --hard 6bsiwy1
就可以回到之前的版本了
3、撤销修改和删除文件操作
当我们使用git进行了操作之后我们想要撤销我们之前的操作,除了使用版本回退的方法我们还可以使用git checkout -- readme.txt
丢弃工作区的修改;如果要删除目录中添加的文件可以直接在文件目录中删除,或者运行rm readme.txt
就会将文件删除了,这时候再执行commit
就可以从版本库中彻底删除这个文件。
4、创建与合并分支
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。比如我们要创建并切换到dev分支上面,就使用git checkout -b dev
接着可以在这个分支上对数据进行修改,修改完成后使用git checkout master
切换到主分支上可以使用git merge dev
可以用于合并指定分支dev到主分支上。几个创建与合并分支的指令查看分支:git branch;创建分支:git branch name;切换分支:git checkout name;创建+切换分支:git checkout –b name;合并某分支到当前分支:git merge name;删除分支:git branch –d name。
5、多人协作
当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。要查看远程库的信息 使用 git remote;要查看远程库的详细信息 使用 git remote –v;除此之外要是想把当前分支的本地提交都交到远程库中,就需要推送本地分支使用git push origin master
命令,如果我们要推送的是其他的分支比如dev就是用git push origin dev
。多人协作中还会出现的问题是推送和拉去冲突一般是如下模式:首先,可以试图用git push origin branch-name
推送自己的修改。如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull
试图合并。如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name
推送。