在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Git 起源 复制代码 代码如下:gitinit touchtest.txt gitadd--a gitcommit-m"fistcommit" 初始化新仓库,在当前目录下由一个.git的目录,所有git需要的数据和资源都放在这个目录中,在当面目录下添加文件后,需要通过gitadd添加到文件追踪管理(添加到暂存区,数据存放在.git/index目录索引,数据内部保存在.git/objects中),gitcommit-m"提交说明备注"提交的信息会提交到数据仓库,数据提交到正式仓库,具体保存在.git/objects中,如以上提交会包含一个commit,tree,blob对象。 2、从现有仓库克隆 复制代码 代码如下:gitcloneurl <a href="mailto:[email protected]:torvalds/linux.git">[email protected]:torvalds/linux.git</a> 如从gitHub上克隆一份linux的源码,不仅是克隆最新版本的源码,还克隆了所有数据仓库的历史版本,每个文件的每一个版本,这个时候及时服务器github发生故障,可以用本地数据仓库重建服务器上的仓库。可以回复到从服务器克隆或最后更一次从服务器拉去的状态。在.git目录中,已经保存了所有版本记录,本地文件夹即工作目录的所有文件删除了,然后从中取出最新版本的文件拷贝。 3、检查文件更新状态 复制代码 代码如下:$gitstatus #Onbranchmaster #Changesnotstagedforcommit: #(use"gitadd<file>..."toupdatewhatwillbecommitted) #(use"gitcheckout--<file>..."todiscardchangesinworkingdi # #modified:test.txt # #Untrackedfiles: #(use"gitadd<file>..."toincludeinwhatwillbecommitted) # #t.txt nochangesaddedtocommit(use"gitadd"and/or"gitcommit-a") 新增加的文件t.txt在未跟踪文件范围Untrackedfiles范围,需要通过gitadd把改文件添加的暂存区,归入的版本跟踪管理。 复制代码 代码如下:$gitadd. $gitstatus #Onbranchmaster #Changestobecommitted: #(use"gitresetHEAD<file>..."tounstage) # #modified:h.txt #newfile:test.txt gitadd.把当前所有目录文件所有新文件和修改文件添加到暂存区,如果test.txt文件提示是Changesnotstagedforcommit,说明此跟踪文件已经发生修改,但是还未添加到暂存区,把修改的文件通过gitadd命令添加到暂存区后。提示Changestobecommitted.文件已经暂存,随时可以提交到仓库。h.txt新添加文件从未跟踪状态Untrackedfiles,通过gitadd命令添加到暂存区,已加入跟踪文件的范围。 复制代码 代码如下:$gitcommit-m"thisistestcommit" [masterd4a498a]thisistestcommit gitcommit--amend--reset-author</p> <p>2fileschanged,3insertions(+) createmode100644t.txt 通过gitcommit-m"xxx"将当前暂存区的内容提交到仓库,本次commit提交文件是在默认master分支,提交commit对象存放在.git/objects的d4/1498a...的文件中,该文件指向一个树tree对象。 复制代码 代码如下:$gitlog commitd4a498a197c24421acee5c5ff96cfbc7e5c3be9e Author:andy<<a href="mailto:[email protected]">[email protected]</a>> Date:SatMar814:23:372014+0800</p> <p>thisistestcommit</p> <p>commit80071e48614361dc282473d6482e3faa9fec17d9 Author:andy<<a href="mailto:[email protected]">[email protected]</a>> Date:SatMar813:35:132014+0800</p> <p>1stcommit gitlog命令查看当前版本
工作区和暂存区文件比较用gitdiff命令,暂存区和最近一天提交版本之间的差异,可以用gitdiff--cached/staged.如下: 复制代码 代码如下:$notepadtest.txt $gitdiff diff--gita/test.txtb/test.txt index0147537..f33d264100644 ---a/test.txt +++b/test.txt @@-1,3+1,4@@ 11111111111111 +22222222222222 $gitstatus #Onbranchmaster #Changesnotstagedforcommit: #(use"gitadd<file>..."toupdatewhatwillbecommitted) #(use"gitcheckout--<file>..."todiscardchangesinworkingd # #modified:test.txt # nochangesaddedtocommit(use"gitadd"and/or"gitcommit-a") $gitdiff--staged 可以发现工作区比暂存区test.txt文件多增加了22222222222222内容。暂存区和数据仓库内容是完全相同的。同时看看当前工作区状态。现在我们吧刚刚修改的内容添加到暂存区,同时比较暂存区和数据仓库文件差异。 $gitaddtest.txt $gitdiff $gitstatus #Onbranchmaster #Changestobecommitted: #(use"gitresetHEAD<file>..."tounstage) # #modified:test.txt # 把工作区修改的内容更新到暂存区后,可以看出此时暂存区和工作区文件完全相同。状态是是已暂存,带提交状态。与此同时,我们可以比较暂存区和数据残酷之间的差异和比较。 复制代码 代码如下:$gitdiff--staged diff--gita/test.txtb/test.txt index0147537..f33d264100644 ---a/test.txt +++b/test.txt @@-1,3+1,4@@ 11111111111111 +22222222222222 我们可以很清楚的看到当前暂存区和数据仓库版本比较。暂存区test.txt内容比最近一次提交内容多22222222222222一行数据。提交数据到数据仓库。我们现在可以把工作区目录和数据仓库比较,看看test.txt直接的文件内容差异。 复制代码 代码如下:$gitdiffhead diff--gita/test.txtb/test.txt index0147537..f33d264100644 ---a/test.txt +++b/test.txt @@-1,3+1,4@@ 11111111111111 +22222222222222 可以很立即看出工作区文件内容比较仓库有新修改的内容。此时我们提交更新所有文件都没有差异了。看看文件差异。 复制代码 代码如下:$gitcommit-m"testgitdiff" [masterfc0166f]testgitdiff Committer:andy<<a href="mailto:[email protected]">[email protected]</a>></p> <p>gitcommit--amend--reset-author</p> <p>1filechanged,1insertion(+) $gitdiff $gitdiff--staged $gitdiffhead 8、文件删除和移动 所有的工作区rmxxx删除后,可以直接从数据仓库获取最近一次提交版本的内容gitrmxxx。直接从数据仓库删除此文件内容。 复制代码 代码如下:$ls h.txttest.txt</p> <p>$rmh.txt</p> <p>$ls test.txt</p> <p>$gitdiff diff--gita/h.txtb/h.txt deletedfilemode100644 index456f979..0000000 ---a/h.txt +++/dev/null @@-1,3+0,0@@ -welcometohere -verygood 可以通过文某比较当前的工作目录h.txt文件已经被删除了,工作区目录和暂存区比较文件差异也可以返现文件删除模式。接下来删除暂存区目录 复制代码 代码如下:$gitdiff--staged</p> <p>$gitrmh.txt rm'h.txt'</p> <p>$gitdiff--staged diff--gita/h.txtb/h.txt deletedfilemode100644 index456f979..0000000 ---a/h.txt +++/dev/null @@-1,3+0,0@@ -welcometohere -verygood - $gitstatus #Onbranchmaster #Changestobecommitted: #(use"gitresetHEAD<file>..."tounstage) # #deleted:h.txt # 通过删除暂存区文件前后可以比较出文件的差异。此时文件也不在跟踪状态。还有我们仅仅希望删除暂存区的内容,不删除工作区的内容 复制代码 代码如下:gitrm--cached-fh.txt的方式来实现,特别是针对工作区有修改,要删除暂存区内容。 $gitreset--hard HEADisnowatfc0166ftestgitdiff</p> <p>$ls h.txttest.txt $gitrm--cachedh.txt rm'h.txt'</p> <p>$gitdiff</p> <p>$gitdiffhead diff--gita/h.txtb/h.txt deletedfilemode100644 index456f979..0000000 ---a/h.txt +++/dev/null @@-1,3+0,0@@ -welcometohere -verygood - $gitdiff-cached error:invalidoption:-cached</p> <p>$gitdiff--cachedh.txt diff--gita/h.txtb/h.txt deletedfilemode100644 index456f979..0000000 ---a/h.txt +++/dev/null @@-1,3+0,0@@ -welcometohere -verygood 移动 复制代码 代码如下:$ls h.txttest.txt</p> <p>$gitmvh.txtd.txt结果是等同于,相当于以下三条命令</p> <p>$ls d.txttest.txt</p> <p>$mvd.txtto.txt</p> <p>$gitrmd.txt rm'd.txt'</p> <p>$gitaddto.txt 9、查看提交历史 复制代码 代码如下:$gitlog commitfc0166f53a45cfc4c17079e5e3454fb7e3136cb6 Author:andy<<a href="mailto:[email protected]">[email protected]</a>> Date:SatMar815:52:102014+0800</p> <p>testgitdiff</p> <p>commitd6eab3a38aee0b25ac395899c82edd48723a2ea9 Author:andy<<a href="mailto:[email protected]">[email protected]</a>> Date:SatMar815:36:532014+0800</p> <p>enforcecommit'</p> <p>commit85ec024140442df6db8625a07c2ee7369cceb704 Author:andy<<a href="mailto:[email protected]">[email protected]</a>> Date:SatMar815:35:442014+0800 com3 复制代码 代码如下:$gitlog--pretty=format:"%h-%an,%ar:%s" fc0166f-yyf,48minutesago:testgitdiff d6eab3a-yyf,63minutesago:enforcecommit' 85ec024-yyf,65minutesago:com3 d4a498a-unknown,2hoursago:thisistestcommit 80071e4-unknown,3hoursago:1stcommit 列出了常用的格式占位符写法及其代表的意义。 选项说明 选项说明
复制代码 代码如下:$gitcommit--amend-m"modifycommit" [masterc660522]modifycommit $gitlog--oneline c660522modifycommit fc0166ftestgitdiff d6eab3aenforcecommit' 85ec024com3 d4a498athisistestcommit 80071e41stcommit 11、取消文件修改 复制代码 代码如下:gitreset|gitresethead将head指向的目录树重置的暂存区 gitreset--softhead^工作区和暂存区不变,但是引用向前回退一次,当对最新提交不满意的时候,撤销最新提交以便更改 gitcommit-e-F.git/COMMIT_EDITMSG以上两个命令相当于gitcommit--amend gitresethead^ gitreset--mixedhead^暂存区和引用回退到上一次提交之前 gitreset--hardhead^引用工作区暂存区彻底消除 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论