查看仓库状态首先在没有任何操作的情况下查看整个仓库的状态[root@supmangit]#gitstatus#位于master分支##初次提交#没有文件提交(创建/复制文件并使用“gitadd”创建轨道)然后在目录中创建一个新文件以检查状态[root@supmangit]#touchfirst.txt[root@supmangit]#gitstatus#位于分支master##初始提交##未跟踪的文件:#(使用"gitadd..."包含要提交的内容)##first.txtcommit是空的,但是有未跟踪的文件(使用"gitadd"toestablishtracking)Trackingafile从上面我们可以看到一个文件现在是什么状态。现在我们按照提示使用gitadd命令来跟踪这个文件。[root@supmangit]#gitaddfirst.txt[root@supmangit]#gitstatus#位于master分支##初始提交##要提交的更改:#(使用"gitrm--cached..."退出暂存区)##新文件:first.txt#git再次给出Hint!gitrm--cached可以退出暂存区,也就是取消跟踪,接下来我们给大家操作一下,看看这个命令的作用是什么。(暂存区是git三大区之一,后面会有统一说明)[root@supmangit]#gitrm--cachedfirst.txtrm'first.txt'[root@supmangit]#gitstatus#在分支master##InitialCommit##Untrackedfiles:#(use"gitadd..."toincludewhattocommit)##first.txtcommit是空的,但是有未跟踪的文件(使用“gitadd”建立跟踪)从上面的执行结果可以看出,gitrm--cachedxxx是将gitadd命令跟踪的文件恢复到未跟踪状态。除了逐个操作文件外,还可以批量操作。[root@supmangit]#touchsecond.txt[root@supmangit]#gitstatus#onbranchmaster##initialcommit##untrackedfiles:#(use"gitadd..."将内容包含到commit)##first.txt#second.txt提交是空的,但是有未跟踪的文件(使用“gitadd”建立跟踪)[root@supmangit]#gitadd.[root@supmangit]#gitstatus#位于分支master##Initialcommit##Changestocommit:#(Use"gitrm--cached..."towithdrawfromthestagingarea)##Newfile:first.txt#Newfile:second.txt#[root@supmangit]#gitrm-r--cached*.txtrm'first.txt'rm'second.txt'[root@supmangit]#gitstatus#inbranchmaster##initialcommit##未跟踪的文件:#(使用“gitadd...”来包含要提交的内容)##first.txt#second.txtcommit是空的,但是有未跟踪的文件(使用“gitadd”来创建跟踪)当文件被更改时,被跟踪文件的状态是什么?[root@supmangit]#gitadd.[root@supmangit]#echo"Hello">first.txt[root@supmangit]#gitstatus#onbranchmaster##initialcommit##要提交的更改:#(使用“gitrm--cached...”腾出暂存区)##新文件:first.txt#新文件:second.txt##更改尚未暂存提交:#(使用“gitadd...”更新要提交的内容)#(make使用"gitcheckout--..."丢弃工作区中的改动)##修改:first.txt#git给了我们三个退出暂存区的选项——这样文件就不会提交了提交first.txt文件更新要提交的内容——即将暂存区中的first.txt更新为最新状态。丢弃工作区中的变化——即更新本地的first.txt到没有变化前的状态(工作区也是三大区域之一)。[root@supmangit]#gitcheckout--first.txt[root@supmangit]#lsfirst.txtsecond.txt[root@supmangit]#catfirst.txt运行这条命令,发现没有内容了恢复到修改前的内容。除了上面的gitrm--cached,还有一个类似的命令,也可以撤销跟踪gitreset--[root@supmangit]#gitadd.[root@supmangit]#gitstatus#is位于分支master##initialCommit##Changestocommit:#(Use"gitrm--cached..."退出暂存区)##Newfile:first.txt#Newfile:second.txt#[root@supmangit]#gitreset--[root@supmangit]#gitstatus#onbranchmaster##initialcommit##untrackedfiles:#(use"gitadd..."includewhattoincludewhattoincludewhattoincludewhattoincludewhatthecommit)##first.txt#second.txtcommit是空的,但是有未跟踪的文件(使用"gitadd"建立跟踪)使用gitdiff命令比较暂存区的文件和工作区[root@supmangit]#gitdiff--gita/first.txtb/first.txtindexe69de29..3b18e51100644---a/first.txt+++b/first.txt@@-0,0+1@@+helloworldmakeanewversion在学习添加新版本之前,我们先学习一下如何查看版本信息,使用gitlog命令在版本区查看历史提交(版本区也是三大类之一gitareas)[root@supmangit]#gitlogfatal:baddefaultrevision'HEAD'above表明我们还没有为你提交一个版本...那么让我们提交几次。..提交使用的命令是gitcommit[root@supmangit]#gitcommit-m"firstsubmission"[master(rootsubmission)e58e53e]firstsubmission2fileschanged,0insertions(+),0deletions(-)createmode100644first.txt创建模式100644second.txt[root@supmangit]#gitlogcommite58e53ea4a19021ac7640aac6994831b7fcf1b85作者:yong.yuan<1218639030@qq.com>日期:SatSep417:14:152021+0800会再次为您提交。这时git提示我们版本信息和暂存区的信息完全一致。[root@supmangit]#gitcommit-m"SecondSubmission"#位于分支master#尚未临时Changessavedforcommit:#(Use"gitadd..."更新要提交的内容)#(使用"gitcheckout--..."丢弃工作区中的更改)#修改:first.txt#修改尚未添加到提交中(使用"gitadd"和/或"gitcommit-a")后面我们修改一个文件,再次提交查看[root@supmangit]#gitaddsecond.txt[root@supmangit]#gitcommit-m"第二次提交"[masterc55da94]第二次提交1个文件更改,1个插入(+)[root@supmangit]#gitlogcommitc55da94d57a4e7f1a076483d09afd182ad10bd5dAuthor:yong.yuan<1218639030@qq.com>Date:SatSep417:19:312021+0800Secondcommitcommite58e953ea021ac7640aac6994831b7fcf1b85Author:yong.yuan<1218639030@qq.com>Date:SatSep417:14:152021+0800第一次提交所有内容后,看看本地状态[root@supmangit]#gitstatus#在分支master上#你的分支比'origin/master'提前1次提交#(使用“gitpush”来发布你的本地提交)#没有文件提交,干净的工作空间关于查看提交历史的命令,介绍一些常用的选项:gitlog[分支名称]查看一个分支的提交历史,不写分支名查看当前分支gitlog--oneline一行显示提交历史gitlog-n其中n为数字,查看最近n次提交gitlog--author[contributorname]查看提交记录指定贡献者的gitlog--graph图形化显示提交历史gitlog--reverse显示前序提交历史版本撤回首先修改两个文件供你提交[root@supmangit]#echo"hello哈哈”>首先。txt[root@supmangit]#gitaddfirst.txt[root@supmangit]#gitcommit-m"modifyfirst.txt"[masterfda1d98]modifyfirst.txt1个文件改变,1个插入(+),1个删除(-)[root@supmangit]#echo"Hellohaha??">second.txt[root@supmangit]#gitaddsecond.txt[root@supmangit]#gitcommit-m"modifysencond.txt"[master]d967d87]修改sencond.txt1个文件改了,1个插入(+),1个删除(-)[root@supmangit]#gitlog-2commitd967d8730ca0e5a9d97a04a2ce448fbf9e280d4c作者:yong.yuan<1218639030@qq.19:47:052021+0800修改sencond.txt提交fda1d98c0b5fdbcaf06f0edffac9a63004a6365d作者:yong.yuan<1218639030@qq.com>日期:MonSep619:44:312021+0800修改first.txt我们可以使用gitreset--softHEAD^退出到之前的版本,或者使用gitreset--softHEAD^2返回之前的两个版本[root@supmangit]#gitreset--softHEAD^[root@supmangit]#gitlog-2commitfda1d98c0b5fdbcaf06f0edffac9a63004a6365d作者:yong.yuan<1218639030@qq.com>日期:MonSep619:44:312021+080first。txtcommit1c0724081fa7505b34e9d269dae43d06babc9851Author:yong.yuan<1218639030@qq.com>Date:MonSep619:27:152021+0800第二次commit看一下撤回前的second.txt文件,发现是我们的commit文件信息,也就是说gitreset--soft只是把文件从版本区拖到暂存区但是文件内容没有改变[root@supmangit]#catsecond.hard选择gitreset--hard查看文件,发现这不是刚才提交的文件内容。如果按照--soft的逻辑,应该是hello哈哈,但是现在workspace(local)中的first.txt变成了版本区最新版本的内容。另一个是gitreset--hard和soft之间的混合。使用该命令将使所有跟踪文件和版本区文件变为以前的版本,但本地文件,即工作区文件的内容将保持不变。[root@supmangit]#gitreset--hardHEAD^HEAD现在位于1c07240第二次提交[root@supmangit]#catfirst.txthelloworld推送到远程服务器,使用gitpush-uoriginmaster命令并输入账号密码即可将版本区的commit文件推送到远程仓库。[root@supmangit]#gitpush-uoriginmasterUsernamefor'https://gitee.com':codeyuanyPasswordfor'https://codeyuany@gitee.com':Countingobjects:9,done.Delta压缩使用高达2个线程。压缩对象:100%(6/6),完成。写入对象:100%(9/9),769字节|0字节/秒,完成。总共9个(delta0),重用0个(delta0)remote:PoweredbyGITEE.COM[GNK-6.1]Tohttps://gitee.com/codeyuany/git.git*[newbranch]master->masterbranchmaster设置为跟踪远程分支masterfromoriginusinggitbranch可以查看当前分支[root@supmangit]#gitbranch*master使用gitbranch-avv命令查看部分分支的基本信息。下面对应的消息是本地分支版本号和远程分时提交日志[root@supmangit]#gitbranch-avv*master1c07240[origin/master]第二次提交remotes/origin/master1c07240第二次提交时我们使用git--reset不断回滚,远程仓库的版本比本地要提交的版本新,怎么办?[root@supmangit]#gitpushUsernamefor'https://gitee.com':codeyuanyPasswordfor'https://codeyuany@gitee.com':Tohttps://gitee.com/codeyuany/git.git![拒绝]master->master(non-fast-forward)error:Unabletopushsomerefsto'https://gitee.com/codeyuany/git.git'Prompt:Updatewasrejectedbecausethelatestcommitofyourcurrentbranch落后于其相应的远程分支提示:在再次推送之前,合并远程更改(例如“gitpull”)。有关详细信息,请参阅“gitpush--help”中的“关于快进的注意事项”部分。现在有两种方法。一种是gitpull,拉取仓库上的新版本,使本地版本成为新版本。而是强制提交gitpush--force,让本地旧版本直接覆盖远程仓库中的新版本。一般来说,除非你非常有把握,否则使用第二种方法。比如你找一段代码,发现之前的版本是正确的,现在的版本有问题。第一种方法是常用方法。往往在提交文件时,必须先使用gitpull命令更新本地版本。比如你同事在你提交之前对A文件做了一些修改,已经提交到远程仓库,你修改B文件后,必须先把别人修改过的A文件拉下来再提交,不然直接上--force就可以forceoverwrite别人的代码了?这点要注意,注意别让同事拿刀割你。使用gitreflog命令查看所有本地仓库(版本区)的变化,包括pull、reset、commit[root@supmangit]#gitreflogf058de8HEAD@{0}:pull:Fast-forward1c07240HEAD@{1}:pull:Fast-forwarda36b4edHEAD@{2}:重置:移动到HEAD^1c07240HEAD@{3}:重置:移动到HEAD^fda1d98HEAD@{4}:重置:移动到HEAD^d967d87HEAD@{5}:提交:修改sencond.txtfda1d98HEAD@{6}:commit:modifyfirst.txta36b4edHEAD@{7}:commit:firstcommitc55da94HEAD@{8}:commit:secondcommite58e53eHEAD@{9}:commit(initial):The第一次提交可以根据reflog中的信息将本地仓库切换到任意版本。切换方式可以是切换版本号如:gitreset--hardd967d87或者使用HEAD切换如:gitreset--hardHEAD@{1}[root@supmangit]#gitreset--hardd967d87HEADis现在在d967d87修改sencond.txt[root@supmangit]#gitreflogd967d87HEAD@{0}:reset:movingtod967d87f058de8HEAD@{1}:pull:Fast-forward1c07240HEAD@{2}:pull:Fast-forwarda36b4edHEAD@{3}:reset:移动到HEAD^1c07240HEAD@{4}:reset:移动到HEAD^fda1d98HEAD@{5}:reset:移动到HEAD^d967d87HEAD@{6}:commit:修改sencond.txtfda1d98HEAD@{7}:commit:修改first.txta36b4edHEAD@{8}:commit:第一次提交c55da94HEAD@{9}:commit:第二次提交e58e53eHEAD@{10}:commit(initial):第一次提交[root@supmangit]#gitreset--hardHEAD@{1}HEAD现在位于f058de8updatesecond.txt。[root@supmangit]#gitreflogf058de8HEAD@{0}:reset:移动到HEAD@{1}d967d87HEAD@{1}:reset:移动到d967d87f058de8HEAD@{2}:pull:Fast-forward1c07240HEAD@{3}:pull:Fast-forwarda36b4edHEAD@{4}:reset:移动到HEAD^1c07240HEAD@{5}:reset:移动到HEAD^fda1d98HEAD@{6}:重置:移动到HEAD^d967d87HEAD@{7}:提交:修改sencond.txtfda1d98HEAD@{8}:提交:修改first.txta36b4edHEAD@{9}:提交:首次提交c55da94HEAD@{10}:commit:第二次提交e58e53eHEAD@{11}:commit(initial):第一次提交