东阿企业做网站推广,网站建设具体流程图,网站开发哪家,上海网站建设价虽然git诞生距今已有12年之久#xff0c;网上各种关于git的介绍文章数不胜数#xff0c;但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握。以下的介绍只是基于我个人对于git的理解#xff0c;并且可能生编硬造了一些不完全符合git说法的词语。目的只是为了让git通…虽然git诞生距今已有12年之久网上各种关于git的介绍文章数不胜数但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握。以下的介绍只是基于我个人对于git的理解并且可能生编硬造了一些不完全符合git说法的词语。目的只是为了让git通俗化使初学者也能大概了解如何快速上手git。同时下面所有讨论我们都假设只使用一个分支也就是主分支master的情况虽然这种作法并不符合git规范但是现实情况中绝大部分用户是直接在master分支上进行工作的所以在这里我们不去引入更加复杂的各种分支的情况也不涉及标签tag的操作只讲在最简单的主分支上如何回退。基本概念3个步骤正常情况下我们的工作流就是3个步骤对应上图中的3个箭头线git add .git commit -m commentgit pushgit add .把所有文件放入暂存区git commit把所有文件从暂存区提交进本地仓库git push把所有文件从本地仓库推送进远程仓库。4个区git之所以令人费解主要是它相比于svn等等传统的版本管理工具多引入了一个暂存区(Stage)的概念就因为多了这一个概念而使很多人疑惑。其实在初学者来说每个区具体怎么工作的我们完全不需要关心而只要知道有这么4个区就够了工作区(Working Area)暂存区(Stage)本地仓库(Local Repository)远程仓库(Remote Repository)5种状态以上4个区进入每一个区成功之后会产生一个状态再加上最初始的一个状态一共是5种状态。以下我们把这5种状态分别命名为未修改(Origin)已修改(Modified)已暂存(Staged)已提交(Committed)已推送(Pushed)检查修改了解了基本概念之后我们来谈一谈犯错误之后如何撤销的问题。首先我们要了解如何检查这3个步骤当中每一个步骤修改了什么然后才好判断有没有修改成功。检查修改的二级命令都相同都是diff只是参数有所不同。已修改未暂存git diff首先我们来看一下如果我们只是简单地在浏览器里保存了一下文件但是还没有做git add .之前我们如何检查有哪些修改。我们先随便拿一个文件来做一下实验我们在文件开头的第2行胡乱加了4个数字1234存盘这时文件进入了已修改状态但是还没有进入暂存区我们运行git diff结果如下diff --git a/index.md b/index.mdindex 73ff1ba..1066758 100644--- a/index.md b/index.md -1,5 1,5 ----layout: main1234layout: maincolor: black---git diff的结果告诉我们哪些文件已经做了哪些修改。已暂存未提交git diff --cached现在我们把修改放入暂存区看一下。先执行git add .然后执行git diff你会发现没有任何结果这说明git diff这个命令只检查我们的工作区和暂存区之间的差异如果我们想看到暂存区和本地仓库之间的差异就需要加一个参数git diff --cacheddiff --git a/index.md b/index.mdindex 73ff1ba..1066758 100644--- a/index.md b/index.md -1,5 1,5 ----layout: main1234layout: maincolor: black---这时候我们看到的差异是暂存区和本地仓库之间的差异。已提交未推送git diff master origin/master现在我们把修改从暂存区提交到本地仓库再看一下差异。先执行git commit然后再执行git diff --cached没有差异执行git diff master origin/master可以看到差异在这里master就是你的本地仓库而origin/master就是你的远程仓库master是主分支的意思因为我们都在主分支上工作所以这里两边都是master而origin就代表远程。撤销修改了解清楚如何检查各种修改之后我们开始尝试各种撤销操作。已修改未暂存如果我们只是在编辑器里修改了文件但还没有执行git add .这时候我们的文件还在工作区并没有进入暂存区我们可以用git checkout .或者git reset --hard来进行撤销操作。可以看到在执行完git checkout .之后修改已被撤销git diff没有任何内容了。一对反义词git add .的反义词是git checkout .。做完修改之后如果你想向前走一步让修改进入暂存区就执行git add .如果你想向后退一步撤销刚才的修改就执行git checkout .。已暂存未提交你已经执行了git add .但还没有执行git commit -m comment。这时候你意识到了错误想要撤销你可以执行git resetgit checkout .或者git reset --hardgit reset只是把修改退回到了git add .之前的状态也就是说文件本身还处于已修改未暂存状态你如果想退回未修改状态还需要执行git checkout .。或许你已经注意到了以上两个步骤都可以用同一个命令git reset --hard来完成。是的就是这个强大的命令可以一步到位地把你的修改完全恢复到未修改的状态。已提交未推送你的手太快你既执行了git add .又执行了git commit这时候你的代码已经进入了你的本地仓库然而你后悔了怎么办不要着急还有办法。git reset --hard origin/master还是这个git reset --hard命令只不过这次多了一个参数origin/master正如我们上面讲过的origin/master代表远程仓库既然你已经污染了你的本地仓库那么就从远程仓库把代码取回来吧。已推送很不幸你的手实在是太快了你既git add了又git commit了并且还git push了这时你的代码已经进入远程仓库。如果你想恢复的话还好由于你的本地仓库和远程仓库是等价的你只需要先恢复本地仓库再强制push到远程仓库就好了git reset --hard HEAD^git push -f总结以上4种状态的撤销我们都用到了同一个命令git reset --hard前2种状态的用法甚至完全一样所以只要掌握了git reset --hard这个命令的用法从此你再也不用担心提交错误了。更多参考