Git重要概念大师头每一次提交,Git都会把它们串成一条时间线,也就是一个分支。在Git中,有一个分支叫做主分支,也就是master分支。严格来说,HEAD不指向提交,而是指向master,master指向提交。因此,HEAD指向当前分支。一开始,master分支是一行。Git用master指向最新的commit,再用HEAD指向master,这样就可以确定当前分支和当前分支的commit点。每提交一次,master分支就会向前移动一步,这样随着你不断的提交,master分支的行会越来越长:当我们创建一个新的分支,比如dev,Git会创建一个新的指针叫dev,指向mastercommits一样,然后HEAD指向dev,表示当前分支在dev上。从现在开始,工作区的修改和提交都是针对dev分支的。例如,新提交后,dev指针向前移动一步,而master指针保持不变。如果我们对dev的工作完成,我们可以将dev合并到master中。Git是如何合并的?最简单的方法就是直接将master指向dev的当前commit,merge就完成了。您甚至可以在完成合并分支后删除dev分支。删除dev分支就是删除dev指针。删除后,我们留下了一个master分支。Workspace,暂存区Workspace工作区:就是你在电脑上可以看到的目录,也就是你的代码所在的文件夹。立即,对文件的所有更改都会立即显示在这里。Repository:工作空间中有一个隐藏目录.git。这不是工作区,而是Git存储库。暂存区Index/Stage:gitadd后,当前对文件的修改会保存到该区Local仓库Repository:gitcommit后,当前暂存区文件的修改会提交到本地仓库Remotewarehouse:远程仓库名称一般称为origin。gitpush后,本地仓库中优先于远程仓库的commit会被推送到远程仓库。下载安装git官网下载并初始化。初始化参数$gitconfig--globaluser.name"你的名字"$gitconfig--globaluser.email"你的邮箱地址"因为Git是分布式版本控制系统,所以每台机器都要声明自己:你的名字和邮箱地址。注意gitconfig命令的--global参数。使用这个参数意味着你机器上所有的Git仓库都会使用这个配置。当然,你也可以为某个仓库指定不同的用户名和邮箱地址。初始化本地仓库$gitinitSSHkey生成$ssh-keygen-trsa-C"youremailaddress"克隆代码//克隆master分支$gitclone<仓库的URL>//指定克隆的分支名称$gitclone-b<分支名称>.gitignore有效方法//先删除本地缓存(变为untracked状态)$gitrm-r--cached.//然后提交$gitadd.$gitcommit-m'update.gitignore'查看各种状态//查看当前状态(分支名,有什么变化,有什么冲突,工作区暂存区的内容,几次提交等)$gitstatus//查看本地仓库的提交历史$gitlog//查看本地仓库的提交历史,简洁版$gitlog--pretty=oneline//查看命令历史$gitreflogbranch//查看分支:$gitbranch-a//创建本地分支:$gitbranch<分支名>//切换本地分支:$gitcheckout//创建+切换本地分支:$gitcheckout-b//将某个分支合并到currentbranch:$gitmerge<要合并的分支>//将本地分支推送到远程$gitpushorigin<要推送的本地分支名>//基于远程分支建立本地分支$gitcheckout-borigin/<远程分支名称>//删除本地分支:$gitbranch-d<本地分支名称>//删除远程分支。将本地的空分支推送到远程分支,相当于删除远程分支。$gitpushorigin:<要删除的远程分支名称>更新并提交新文件,或者更改代码。起初,它只存在于您的工作区中。当您使用gitadd时,Git将缓存此更改并跟踪它。当你使用gitcommit时,你的更改将被提交到仓库。//缓存所有改动$gitadd--all//缓存改动到单个文件$gitadd<文件的文件名,包括路径>//提交到本地仓库$gitcommit-m//更新thelocalcode$gitpullorigin//将本地提交推送到远程$gitpushorignUndo//撤销对工作区中文件的更改$gitcheckout[file]//撤销所有文件的更改在工作区$gitcheckout.//重做将暂存区的指定文件设置为与上次提交一致。但是变化并没有消失,而是变化回到了工作空间$gitreset[file]//重新设置暂存区和工作空间,使其与上次提交一致。$gitreset--hard//将当前分支的指针重置为指定的commit,同时重置暂存区。但是变化并没有消失,而是变化回到了工作区$gitreset[commit]//重置当前分支的HEAD为指定的commit,并重置暂存区和工作区与指定的一致犯罪。$gitreset--hard[commit]//重置当前HEAD为指定的commit,但保持暂存区和工作区不变gitstash$gitstashpopgitreview使用gerrit系统进行代码审查,在git中使用gitreview(defaultismaster)命令进行审查操作。Rules提交reivew前先拉取远程代码,确保提交前是最新的代码。如果有冲突,需要在本地合并。将单个功能更改放入提交中,然后提交reivew。特殊情况审核不通过怎么办?先回到你要修改的commit$gitreset--soft<你要修改的commit的id>继续修改你要改的文件。修改后,添加缓存文件,执行$gitcommit--amend将新产生的修改合并到上次的修改中,继续执行gitreview。如果我进行了多次提交,我该怎么办?如果多个提交有关联,请将本次提交合并为一次提交//查询***提交的commit,记住id。$gitlog//执行rebase操作$gitrebase-i<上一步找到的id>//弹出界面列出从***提交的commit到现在的所有提交记录//更改'pick'将每列开头的's'改为's',只保留***列中的'pick'。//保存修改后,系统会自动将这些commit合并为一个commit。//如果遇到冲突,需要手动解决。合并冲突后,继续变基,直到合并所有提交。$gitrebase--continue如果在review中提交了多个commit,其中一个commit没有被review(包括上一次commit没有生成changeid)怎么办?一次提交对应一次审查。如果前次审核不通过,后续审核通过则不提交。前次审核必须通过后才能提交后续审核。//查询review失败对应的commitid(gerrit中有记录)//回到本次commit的上一个节点,注意有个^$executegitrebase-i^//修改并缓存待提交的文件后$gitcommit--amend//返回head$gitrebase--continue//提交旧审核的更新$gitreview