Git详解一

匿名 (未验证) 提交于 2019-12-03 00:26:01

由于马上就要进入到公司了,所以在进去之前好好的学习下怎样使用最近比较流行的版本控制工具,不然进去连项目提交,拷贝都不行。更就不用说做项目了,^_^
关于Git学习总结,有部分是从他人博客中拷贝过来的,希望博主看到不要怪罪,我都有注明出处和原文地址的。


获取Git库有两种方式:

  • 一种是直接在工作目录下创建一个新的Git库
  • 另一种是从已有的库中克隆

方式一:

$ git init 该命令会在工作目录下创建一个.git目录(用于存放项目的版本历史、配置文件等)。

方式二:

$ git init [git_name] Git将在工作目录下,创建一个名为git_name的文件夹,而.git目录存放在该文件夹中。所以可以简单地理解为,创建一个名为git_name的项目。

克隆的命令为:

$ git clone [url] 该命令将会从url中表示的代码库中,将整个代码库都保存下来,并提取出最新版的文件版本。 

例子:
该示例,将会在工作目录下,创建一个test目录,然后从git://github.com/test/test.git上将所有版本下载下来,并提取出最新版本。

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

与上面相同,这里可以在命令最后添加一个git_name字段,用于指定新项目目录的名称。

$ git clone git://github.com/test/test.git testgit

关于Git本地厂库初始化引用:我的Git教程 之 初始化本地库。作者:scutwang

作用:
区分不同开发人员的身份。
辨析:
这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
命令

  • 项目级别/仓库级别:仅在当前本地库范围有效
git config user.name username ##username为用户名## git config user.email 1540473@qq.com

信息保存在.git/config目录下:

[user]         name = lc         email = 1548570473@qq.com
  • 系统用户级别:登录当前操作系统的用户范围
git config --global user.name username ##username为用户名## git config --global user.email good@163.com

信息保存位置:~/.gitconfig文件中。

  • 优先级别

    • 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别签名
    • 如果只有系统级别的签名,就以系统用户级别的签名为准
    • 二者都没有不允许
git status 查看工作区、暂存区状态
git add [filename] 将工作区的“新建/修改”添加到暂存区
git commit -m "commit message" [filename] 将暂存区的内容提交到本地库

方式1:

git log

显示结果:

commit 420300a4acb7e38d5fc263666c251d5e1ca80608 (HEAD -> master) Author: lc <1548570473@qq.com> Date:   Tue Jun 12 10:31:39 2018 +0800      second update file  commit 96e4329179cfd87adda38f2054b2711fc7af9467 Author: lc <1548570473@qq.com> Date:   Tue Jun 12 10:22:28 2018 +0800      first update file  commit de9d70393c4eb6cef3046fab6f40a8df93392e34 Author: lc <1548570473@qq.com> Date:   Tue Jun 12 10:11:35 2018 +0800      first commit file

方式2

git log --pretty=oneline

显示结果:

420300a4acb7e38d5fc263666c251d5e1ca80608 (HEAD -> master) second update file 96e4329179cfd87adda38f2054b2711fc7af9467 first update file de9d70393c4eb6cef3046fab6f40a8df93392e34 first commit file

方式3:

git log --oneline

显示结果:

420300a (HEAD -> master) second update file 96e4329 first update file de9d703 first commit file

方式4:

git reflog  ##如果是回到历史版本后,该方式可以站在当前版本处,可以查看之前的历史版本##

显示结果:

420300a (HEAD -> master) HEAD@{0}: reset: moving to 420300a fa16aa4 HEAD@{1}: commit: delete a.txt 420300a (HEAD -> master) HEAD@{2}: reset: moving to 420300a de9d703 HEAD@{3}: reset: moving to HEAD~1 96e4329 HEAD@{4}: reset: moving to HEAD^ 420300a (HEAD -> master) HEAD@{5}: reset: moving to 420300a 96e4329 HEAD@{6}: reset: moving to 96e4329 420300a (HEAD -> master) HEAD@{7}: commit: second update file 96e4329 HEAD@{8}: commit: first update file de9d703 HEAD@{9}: commit (initial): first commit file ##HEAD@{number}:表示移动多少不可以到达该历史状态。

方式一:基于索引操作

git reset --hard id   ## hard参数:让工作区间和缓存区间都回到历史版本## ##版本索引id,可以通过git log 查看。

例子:

git reset --hard 420300a ##表示回到历史版本为420300a的版本##

方式二:基于^符号

git reset --hard HEAD^  ##该方式只能回到历史,不能前进到现在## ##一个^符号代表回到前一个历史版本,连个代表回到第二个,.....##

例子:

git reset --hard HEAD^^ ##表示回到当前版本的以前连个版本处##

方式三:使用~符号

git reset --hard HEAD~number ##number代表回到前几个版本## ##该方式也只能后退,不能前进##

例子:

git reset --hard HEAD~2 ## 表示回到历史版本以前两个版本##

  • 仅仅在本地仓库移动HEAD指针

  • 在本地仓库移动HEAD指针,重置缓存区

  • 在本地库中移动HEAD指针,重置缓存区和工作区

前提: 删除前提,文件存在时的状态提交到了本地库。

操作:

  • 删除操作已经提交到本地库:指针位置指向历史记录。
git reset --hard [历史指针位置(也就是删除前历史版本)]
  • 删除操作尚未提交到本地库:指针位置指向HEAD
git reset --hard HEAD
  • 将工作区中的文件和暂存区进行比较。
git diff [filename]

例子:工作区间中的apple.txt和本地缓存进行比较

git diff apple.txt
  • 将工作区中的文件和本地库历史记录比较
git diff [本地仓库中历史版本] [filename]

例子:工作取件中的apple.txt和本地仓库中最新记录比较。

git  diff HEAD apple.txt
  • 不带文件比较工作区中的所有文件
## 比较工作区和缓存取的所有文件## git diff  ## 比较工作区和本地仓库中所有文件## git diff [本地仓库中的历史版本]
  • 创建分支
git branch [分支名]
  • 查看分支
git branch -v
  • 切换分支
git checkout [分支名]
  • 合并分支

第一步:切换到接收修改的分支(被合并,增加新内容)上。

git checkout [被合并的分支名]

第二步:执行merge命令

git merge [有新内容分支名]
  • 解决冲突

冲突的表现:

<<<<<<< HEAD bbb ======= aaaa >>>>>>> hot_fix

解决冲突:
第一步:编辑文件删除特殊符号。
第二步:把文件修改到满意程度保存退出
第三步:git add [filename]
第四步:git commit -m “commit message”
注意:此时commit一定不能带具体文件名

文章来源: Git详解一
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!