Git基础

Posted xgonzh10n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git基础相关的知识,希望对你有一定的参考价值。

创建Git仓库

  • 创建新的仓库

    首先需要创建一个工作目录test,然后在终端切换至该目录并输入:

    $ git init
  • 克隆现有仓库

    如果想获得一份test仓库的拷贝,可以在终端输入:

    $ git clone https://github.com/xGonZh10n/test.git

    或者

    $ git clone git@github.com:xGonZh10n/test.git

记录每次更新到仓库

工作目录下的文件主要有以下两种状态:

  • 已跟踪:指那些被纳入版本控制的文件,它们的状态又可细分为未修改,已修改或已暂存。
  • 未跟踪:工作目录中除了已跟踪文件以外的所有其它文件。

初次创建或克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。编辑某些文件后,Git会将它们标记为已修改文件。我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存的修改,如此反复。所以,使用Git时文件的生命周期如下:

技术图片

查看文件状态

$ git status

如果不需要查看详细状态,可在命令后面加上 -s 参数。

添加文件到暂存区

$ git add <file>

该命令使用文件或目录路径作为参数,如果参数是目录路径,则递归跟踪该目录下所有文件;同时,每一次修改文件都需要运行该命令把文件最新版本重新暂存。

忽略文件

如果有文件无需纳入Git管理,我们可以创建.gitignore文件,并在其中列出需要忽略的文件模式。该文件的格式规范如下:

  • 所有空行或者以#开头的行都会被Git忽略;
  • 可以使用标准的glob模式匹配;
  • 匹配模式可以以(/)开头防止递归;
  • 匹配模式可以以(/)结尾指定目录;
  • 要忽略指定模式以外的文件或目录,可以在模式前加上感叹号(!)取反。

GitHub上有一个十分详细的针对数十种项目及语言的.gitignore文件列表,可以作为参考。

查看已暂存或未暂存的修改

如果你想知道当前做的哪些更新还没有暂存,哪些更新已经暂存起来准备提交,可以使用git diff命令。尽管git status命令可以简单的列出修改过的文件名,但是git diff命令将会更详细的显示文件具体哪些行发生了改变。

  • 查看尚未暂存的文件更新了哪些部分:

    $ git diff

    此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化。

  • 查看已暂存的将要添加到下次提交里的内容:

    $ git diff --cached

提交更新

每次提交前,先用git status看一下文件是不是都已经暂存起来,然后再进行提交:

$ git commit -m "<message>"

移除文件

从暂存区域移除,并连带从工作目录中删除指定的文件,可以使用以下命令:

$ git rm <file>

如果删除之前修改过并且已经放到暂存区域,则必须要用强制删除选项-f

如果想把文件从Git仓库删除,但仍希望保留在当前工作目录中,则需要使用--cached选项。

移动或重命名文件

$ git mv <from> <to>

查看提交历史

$ git log

默认不用任何参数,该命令会按提交时间列出所有的更新,最近的更新排在最上面。

如果需要显示每次提交的内容差异,可以使用选项-p。你也可以在选项后面加上-2来仅显示最近两次提交。

如果需要查看每次提交的简略统计信息,可以使用选项--stat。在每次提交下面列出所有被修改过的文件、有多少文件被修改以及被修改过的文件的哪些行被添加或移除。

如果需要使用其它格式展示提交历史,可以使用选项--pretty

撤销操作

如果提交完成后发现漏掉几个文件没有添加,或者提交信息写错。可以运行以下命令尝试重新提交:

$ git commit --amend

该命令会将暂存区中的文件提交。如果自上次提交以来还未做任何修改,那么快照会保持不变,修改的只是提交信息。而且最终只会有一个提交,第二次提交将代替第一次提交的结果。

取消暂存的文件

$ git reset HEAD <file>

撤销对文件的修改

$ git checkout -- <file>

版本切换

$ git reset --hard <commit_id>

想要切换到的commit_id可通过git reflog命令查看,此外,上一个版本的commit_id也可使用HEAD^表示。

远程仓库的使用

查看远程仓库

$ git remote <-v>

该命令会列出你指定的每一个远程服务器的简写。如果加上选项-v,则会显示需要读写远程仓库使用的Git保存的简写与其对应的URL。

添加远程仓库

$ git remote add <remote-name> <url>

该命令添加一个新的远程Git仓库,同时指定一个名字简写。

从远程仓库中抓取

$ git fetch <remote-name>

该命令会访问远程仓库,并从中拉取你还没有的数据到本地仓库,但它并不会自动合并或修改你当前的工作,必须手动将其合并。如果想要自动抓取数据然后合并到当前分支,你可以使用git pull命令。

推送到远程仓库

$ git push <remote-name> <branch-name>

查看某个远程仓库

$ git remote show <remote-name>

重命名某个远程仓库

$ git remote rename <from> <to>

移除某个远程仓库

$ git remote rm <remote-name>

打标签

列出标签

$ git tag

附注标签

$ git tag -a <tag-name> -m "<message>"

其中,选项-m指定了一条将会存储在标签中的信息。通过使用git show命令,可以看到标签信息与对应的提交信息。

轻量标签

$ git tag <tag-name>

通过使用git show命令,不会看到额外的标签信息,只会显示出提交信息。

查看标签信息

$ git show <tag-name>

后期打标签

在打标签命令后面指定提交的校验和或部分校验和。

共享标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。

  • 推送单个标签

    $ git push origin <tag-name>
  • 推送多个标签

    $ git push origin --tags

删除标签

删除本地仓库上的标签,可以使用命令:

$ git tag -d <tag-name>

但是,上述命令并不会从任何远程仓库中移除这个标签,必须使用以下命令来更新远程仓库:

$ git push origin :refs/tags/<tag-name>

Git别名

可以通过git config为每个命令设置一个别名。例如:

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

为了解决取消暂存文件命令的易用性问题,可以添加自己的取消暂存别名:

$ git config --global alias.unstage 'reset HEAD'

这会使以下两个命令等价:

$ git unstage <file>
$ git reset HEAD <file>

参考资料

以上是关于Git基础的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

如何管理在每个 git 版本中添加私有代码片段?

使用 Git 来管理 Xcode 中的代码片段

markdown Git代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段