git学习

    xiaoxiao2021-03-25  147

    git学习网址

    官网网址:http://git-scm.com/book/en/v2

    廖雪峰教程http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

    一、git创建本地库

    版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

    创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

    mkdir learngit 进入这个目录 cd learngit 通过 git init 命令把这个目录变成Git可以管理的仓库: git init 

    结果如下:

    可以看到创建了一个空的仓库。

    细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

    二、将文件放入git仓库

    比如,我在 Git 仓库所在目录下创建一个readme.txt的文档。文件内容是: <pre name= "code"   class = "plain" >Git  is  a version control system.   Git  is  free software.  

    现在,我想要将它放入仓库中。

    这很简单,只需要两步:

    【第一步:add】

    git add readme.txt  

    这个命令执行成功后,应该没有任何输出。这是好事!

    【第二步,commit】

    git commit -m “wrote a readme file”  

    这个命令执行完后,输出如下:

    [master (root-commit) cb926e7] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt 出现上面这样的信息说明commit命令执行成功了。

    简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

    可以多次add不同的文件,然后执行一次commit,比如:

    $ git add file1.txt $ git add file2.txt $ git add file3.txt $ git commit -m "add 3 files." 三、 git status  

    git status时刻关注仓库状态

    历史版本中穿梭,仅需要两步git log \git rest --hard

    【总结】

    1、Git log 查看提交历史的commit id

    2、git reset --hard commit_id

    注意:如果出现Unlink of file '.......' failed.Should I try again?(y/n),说明有其他程序在操作git目录下的文件,比如应用程序、dos命令窗或者git bash,导致git无法关联此文件,要关闭掉所有使用该文件的应用程序,重新git reset即可。

    ===================================================

    开始这节学习之前,我们尝试对readme.txt文件再次进行如下修改:

    [plain]  view plain  copy   <span style="font-size:14px;">Git is a distributed version control system.   Git is free software under GPL.</span>   我们将其再次提交到仓库,还是两步哦(add 和 commit):

    大现在为止,请回忆一下我们一共对readme.txt修改并提交了几次呢?如果你按照本教程从头开始认真学习的话,你肯定能回答出“我们一共修改并提交了3次”。不错,你回答正确。但是大家想一样,如果是多人合作修改readme.txt,你还能凭回忆答出readme.txt一共修改并提交了几次吗?肯定不能吧。因为你的记性再好也只能记住自己对readme.txt的修改和提交,而不能知道他人对readme.txt文件修改和提交次数。

    【git log查看commit历史】

    那么,我们如何知道仓库中的一个文件,到目前版本为止一共修改了提交了几次呢?git给我们提供了一个命令。那就是:

    [plain]  view plain  copy   <span style="font-size:14px;">git log</span>   在我们的仓库中,执行上面的命令,输入结果是:

    从上面的结果我们可以看到,readme.txt一共有3次commit,并且列出了每次commit的作者、日期,以及每次commit时填写的描述信息。git log命令的输出结果是由近及远的,最上面的commit是最近一次commit,最下面的commit是最早一次commit。

    从git log输出结果中,我们还看到了每次commit都有一大串数字,那串数字是一个哈希码,用来唯一标示1次commit。

    git log是显示所有的commit,Page Up、Page Down、↓、↑来控制显示

    退出log显示则按q+回车即可

    如果只想显示最近的N次提交则使用git log -n N

    【退回到历史版本】

    在git中,当前版本是用HEAD版本来标识的,前一个版本使用HEAD^来表示,上上个版本使用HEAD^^来表示。那么前100个版本如何表示呢?我们不可能写100个^,我们有简便写法,那就是HEAD^100。用这种简便写法,上上个版本可以这样表示HEAD^2。

    我们知道,我们当前是在“append GPL”这个版本上。那么,如果我想回退到上一个版本,也就是“add distributed to readme file”上,该怎么办?可以使用git reset命令:

    从这个命令,可以看到当前版本(HEAD标识)已经在“add distributed to readme file”版本上了,如果不放心,可以看看当前readme.txt文件的内容:

    发现确实是“add distributed to readme file”版本。

    那么如果我想继续退回到“wrote a readme file”上呢?  是git log --hard HEAD^2吗?在执行回退命令之前,我们一定要用git log查看下当前版本库的提交状态。我们执行git log,输出如下:

    从上面的输出发现,当前的版本是“add distributed to readme file”版本(最上面的commit),“wrote a readme file”版本只是它的上一个版本 ,所以不能用git log --hard HEAD^2命令,而是应该用git log --hard HEAD^命令。我们执行下git log --hard HEAD^命令,看下输出:

    发现HEAD目前位于“wrote a readme file”版本上了。所以,我们已经把版本退回到了“wrote a readme file”版本上了。

    我们也可用哈希码代替上面的HEAD^等。

    通过上面的经验,我们推荐大家在执行回退之前,一定要先用git log查看当前版本库的提交状态,在执行回退命令。

    【穿越回来】

    如果你对退回到历史版本后悔了,想回到历史版本以后的某个版本,怎么办?需要两步:

    第一步:使用git reflog查看HEAD变动的历史。

    因为任何一个commit都曾是HEAD的位置。所以找到HEAD的历史,就能找到任何一个commit。

    上面的输出结果也是从上到下由近及远排列的。可以看到HEAD变动的历史。我们对HEAD的变动进行一下说明。我们从最底下开始往上说:

    第一次变动是:commti “wrote a readme file”,HEAD指向0f8d88c;

    第二次变动是:commit “add distributed to readme file”,HEAD指向d926915;

    第三次变动是:commit “append GPL”,HEAD指向35c1ae8;

    第四次变动是:reset操作,将HEAD移动到d926915,也就是“add distributed to readme file”版本

    第五次变动是:reset操作,将HEAD移动到0f8d88c,也就是“append GPL”版本。

    由此,可以看到每一个版本的哈希码的前6位,因为一个哈希码对应一个版本。

    第二步:git reset --hard commit_id穿越回来

    随意可以通过git reset --hard commit_id来穿越到任何版本。例如我们想回到最新版本,则执行命令:

    可以看到,当前HEAD位于35c1ae8版本上, 也就是“append GPL”版本上。

    【git reflog 与 git log区别】

    git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

    具体一个例子,假设有三个commit, git st:

    commit3: add test3.c

    commit2: add test2.c

    commit1: add test1.c

    如果执行git reset --hard HEAD~1则 删除了commit3,如果发现删除错误了,需要恢复commit3,这个时候就要使用git reflog

     HEAD@{0}: HEAD~1: updating HEAD 63ee781 HEAD@{1}: commit: test3:q 红色加粗的即是被删除了的 commit3,运行git log则没有这一行记录

    可以使用git reset --hard 63ee781将红色记录删除,则恢复了cmmit3,运行git log后可以看到:

    commit3: add test3.c

    commit2: add test2.c

    commit1: add test1.c

    转载请注明原文地址: https://ju.6miu.com/read-12120.html

    最新回复(0)