Git作用
通过git管理github所托管的项目代码
Git安装
https://www.git-scm.com/download/win
Git与Github
Git可以理解为一个版本管理的工具,而Github则是一个在线的代码仓库;
Git几个重要理念
工作区:可以理解为你存放业务代码的目录;
暂存区:stage或index区域,存放在一般在”.get/index”文件中;
版本库:存放在”.get”目录;
对象库:存在在”.git/objects”目录中;
git add
对工作区修改/新增的文件执行git add命令时,暂存区index的目录树被更新,同时工作区修改/新增的文件内容被写入到对象库objects中的一个新对象object中,而该对象的ID被记录在暂存区index的文件索引中;
add命令后面做3件事情:
更新index目录树、更新内容写入objects、新生成object链接写入index中;
git commit
当执行git commit操作时,暂存区index的目录树写到对象库objects中,同时暂存区index的目录树更新到master分支;
我这里好奇:为什么要把目录树写到objects中呢,另外,搞了半天,这个commit的最后,还是在本地磁盘啊;
git reset HEAD
当执行git reset HEAD时,因为HEAD可以看做是指向master分支的游标,因此,暂存区index的目录树会被master分支指向的目录树所替换,但工作区不受影响;
git rm
当执行git rm --cached <file>命令时,会直接从暂存区idnex删除文件,工作区则不做出改变;
Index不是只有一个目录树吗,这里删除的应该是目录树对应的目录,外加对应object的链接;
git checkout
当执行git checkout/git checkout -- <file>命令时,会用暂存区index全部或指定的文件替换工作区的文件,该命令会清除工作区中未添加到暂存区的改动;
git checkout HEAD
当执行 git checkout HEAD/git checkout HEAD <file> 命令时,会用HEAD指向的master分支中的全部或者部分文件替换暂存区index、工作区中的文件,该命令不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动;
指令介绍
workspace:工作区
staging area:暂存区/缓存区
local repository:或本地仓库
remote repository:远程仓库
创建仓库命令
git init
git init [目录]
git init 命用于在目录中创建新的Git仓库,在目录中执行git init就可以创建一个Git仓库了,或者,直接后缀目录也可以;
git clone
git clone url
url是要拷贝的项目
git clone 拷贝一个Git仓库到本地,让自己能够查看该项目,或者进行修改;拷贝完成后,在当前目录下会生成一个目录,默认情况下,Git会按照你提供的URL所指向的项目的名称创建你的本地项目目录,如果你想要一个不一样的名字, 可以在该命令后加上你想要的名称:git clone url myProjectName
提交与修改
git add
①添加一个或多个文件到暂存区:git add [file1] [file2] ...
②添加指定目录到暂存区,包括子目录:git add [dir]
③添加当前目录下的所有文件到暂存区:git add
git add 命令可将该文件添加到暂存区。
git status
git status命令用于查看在你上次提交之后是否有对文件进行再次修改,通常我们使用-s参数来获得简短的输出结果:
A:代表add新增
M:代表Modify修改
git diff
git diff命令显示已写入暂存区和已经被修改但尚未写入暂存区文件对区别;
①显示暂存区和工作区的差异
git diff [file]
②显示暂存区和上一次提交(commit)的差异:
$ git diff --cached [file]
$ git diff --staged [file]
③显示两次提交之间的差异:
$ git diff [first-branch]...[second-branch]
④查看已缓存的与未缓存的所有改动
git diff HEAD
⑤显示摘要而非整个diff:git diff --stat
git commit
git commit命令将暂存区内容添加到本地仓库中:
①提交暂存区到本地仓库中:git commit -m [message]
②提交暂存区的特定文件到仓库区:git commit [file1] [file2] ... -m [message]
③从工作区直接提交到本地仓库:git commit -a
④设置提交代码时的用户信息:
git config --global user.name 'runoob'
git config --global user.email test@runoob.com
如果去掉 --global 参数只对当前仓库有效。
git reset
git reset命令用于回退版本,可以指定退回某一次提交的版本,git reset命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
①--soft参数用于回退到某个版本;
②--mixed为默认参数,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变;
③--hard参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交;
④HEAD参数表示当前版本:
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推...也可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD~2 上上一个版本
HEAD~3 上上上一个版本
以此类推...
git reset HEAD命令用于取消已缓存的内容,即执行git reset HEAD来取消之前git add添加,但不希望包含在下一提交快照中的缓存。
git rm
git rm命令用于删除文件,git rm删除文件有以下几种形式:
①将文件从暂存区和工作区中删除:git rm <file>
②强行从暂存区和工作区中删除修改后的文件:git rm -f <file> (工作区通过add新增文件后,再次修改但没提交到index)
③如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,使用 --cached 选项即可:git rm --cached <file>
④如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:git rm –r *
git mv
git mv 命令用于移动或重命名一个文件、目录或软连接。
①移动文件:git mv [file] [newfile]
②重命名文件:git mv -f [file] [newfile]
提交日志
git log
在使用Git提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用git log命令查看。
①查看历史记录的简洁版本:git log --oneline
②查看历史中分支情况:git log --graph --oneline
③逆向显示所有日志:git log --reverse --oneline
④查找指定用户的提交日志:git log --author=XXXX --oneline
⑤查找指定日期的日志:
git log --oneline --before=xxx --after=xxxx
git log --oneline --since=xxx --until=xxxx
git blame
如果要查看指定文件的修改记录可以使用git blame命令,git blame命令是以列表形式显示修改记录:git blame <file>
远程操作
git remote
git remote命用于操作远程仓库:
①显示所有远程仓库:git remote -v
②显示某个远程仓库的信息:git remote show [remote]
③添加远程版本库:git remote add [shortname] [url]
④删除远程仓库:git remote rm name
⑤修改仓库名:git remote rename old_name new_name
git fetch
git fetch命令用于从远程获取代码库,该命令执行完后需要再执行git merge远程分支到你所在的分支;假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行:
git fetch [alias]
以上命令告诉Git去获取它有你没有的数据,然后你可以执行:
git merge [alias]/[branch]
以上命令将服务器上的任何更新合并到你的当前分支。
git pull
git pull 命用于从远程获取代码并合并本地的版本,命令格式如下:git pull <远程主机名> <远程分支名>:<本地分支名>
如果远程分支是与当前分支合并(即当前目录),则冒号后面的部分可以省略:git pull <远程主机名> <远程分支名>
git push
git push命用于从将本地的分支版本上传到远程并合并,命令格式如下:git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则可以省略冒号:git push <远程主机名> <本地分支名>
如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:git push --force <远程主机名> <本地分支名>:<远程分支名>
删除主机且分支也一起删除,则可以使用--delete参数:git push <远程主机名> --delete <远程分支名>
Git分支管理
使用分支可以从开发主线上分离开来,然后在不影响主线的同时继续工作;
创建分支:git branch (branchname)
切换分支:git checkout (branchname)
删除分支:git branch -d (branchname)
合并branchname分支到当前分支:git merge branchname
列出分支:git branch
解决冲突:修改发生冲突的文件、然后重新add、commit后再去合并
Git标签
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用git tag给它打上标签。
查看所有标签:git tag
指定标签信息:git tag -a <tagname> -m "标签"
创建标签:git tag tagName
删除标签:git tag -d tagName
查看此版本所修改的内容:git show tagName