Git学习笔记

2 篇文章 0 订阅

1.出处

源自廖雪峰git教程及其他博客资料

2. 初始化

2.1 用户名和邮箱

查看用户名和邮箱:

$ git config user.name
$ git config user.email

修改用户名和邮箱

$ git config --global user.name "your name"
$ git config --global user.email "your email"

2.2 创建版本库

$ mkdir learngit
$ cd learngit
$ pwd

分别代表:

  • 创建版本库文件夹
  • 进入该目录
  • 查看当前工作目录

初始化仓库:

$ git init

该操作会创建一个空的仓库,并且该目录下会增加一个新的.git隐藏目录,使用命令ls -ah查看

3. 新建文件

$ touch README.md

4. 修改

$ vi README.md

修改完成后:
:wq:保存退出vi
:q:强制退出vi

查看文件内容:

$ cat README.md

或者

$ vim README.md

5. 提交

5.1 添加

$ git add README.md

如果显示warning: LF will be replaced by CRLF
则是由于换行符的问题,只要输入如下命令:

#提交时转换为LF,检出时转换为CRLF
$ git config --global core.autocrlf true

如果add命令后没反应则说明成功

5.2 提交

$ git commit -m "description of this submission"

6. 查看

6.1 查看当前仓库状态

$ git status

6.2 查看改动

比较工作区文件与暂存区文件的区别(上次git add的内容)

$ git diff

比较暂存区文件与仓库分支里最新版本(上次git commit后的内容)的区别

$ git diff --cached

比较工作区文件与仓库分支里最新版本(上次git commit后的内容)的区别

$ git diff HEAD -- filename

注意:

  • git diff比较的是工作目录中当前文件和暂存区域之间的差异, 也就是修改之后还没有暂存起来的变化内容。若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。
  • git diff只显示已被add到版本库中的文件,在工作区和暂存区中的内容差异,因此如果新建一个文件后使用git diff无反应
  • git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。

6.3 查看改动日志

$ git log

或者美化输出方式:

$ git log --oretty=oneline

前面一大串是commit id(版本号),由SHA1计算得出

7. 版本回退

$ git reset --hard HEAD^

HEAD^表示回退到前一个版本,前两个就是HEAD^^,前100个就是HEAD~100

如果后悔了,想退回去:

$ git reset --hard (commit id)

需要输入commit id才能确定,可以只输入前几位,不过要确保不同

如果找不到版本号了,可以使用git reflog查看历史命令

  • git log查看提交历史
  • git reflog查看命令历史

8. 工作区和暂存区

8.1 工作区

电脑里能看到的目录,也就是刚才新建的MyRepository
MyRepository

8.2 版本库

位于工作区的隐藏目录.git,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
在这里插入图片描述
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

8.3 加深理解

现在,在工作区新增一个LICENSE文件,并修改README.md,然后使用两次命令将二者加入暂存区

$ touch LICENSE
$ git add LICENSE
$ git add README.md

现在暂存区状态如下:
在这里插入图片描述

最后使用

$ git commit -m "understand how stage works"

将其提交到分支

在这里插入图片描述

为什么要有暂存区?
暂存区就像购物车,没到付款的时候不确定购物车里面的东西全部都是要的,如果每拿一件商品就付一次款那就很麻烦了。当多个文件修改完成放入暂存区的时候,发现其中一个文件的代码有问题,这时候你可以用checkout单独将这个文件还原重改;如果你将这些文件一次性全部放进库里,等你发现有问题时就不能单独拿出一个文件了,只能版本回档,那时你就要重新修改所有文件的代码。

9. 管理修改

Git 管理的是修改而不是文件的理解:

  • README.md进行修改,然后git add README.md
  • 然后再修改README.mdgit commit提交
  • 操作过程:第一次修改 -> git add-> 第二次修改 -> git commit
  • 结果:第一次修改提交了,第二次修改未提交

解释:由于Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

10. 撤销修改

情况一:修改了工作区的文件,但是还没提交

命令:git checkout -- file可以丢弃工作区的修改

  • 命令git checkout -- README.md意思就是,把README.md文件在工作区的修改全部撤销,这里有两种情况:
  • 一种是README.md自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是README.md已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
  • 总之,就是让这个文件回到最近一次git commitgit add时的状态。

情况二:修改了工作区的文件,并且git add到暂存区了
命令:git reset HEAD <file> 可以撤销暂存区的修改

  • 显示如下表示成功:
	$ git reset HEAD README.md
	Unstaged changes after reset:
	M	readme.txt
  • git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本
  • 然后现在情况回到了情况一,即可使用git checkout -- README.md回退工作区内容

情况三:修改了工作区文件,并且git commit到版本库了
命令:使用版本回退一节的命令

$ git reset --hard HEAD^

或者

$ git reset --hard (commit id)

前提是还没有推送到远程仓库如Github

11. 追加修改

如果当我们提交 commit 后,还未 push 到远程分支前,发现有些文件忘了暂存了,这些文件自然也不可能被上传。此时
有两种办法:

  • 重新 git add 该文件,然后再重新git commit -m "comment",需要重新写一次提交描述
  • 重新 git add 该文件,然后只需要git commit --amend即可,提交描述与之前的提交相同

12. 删除文件

12.1 删除

假设我们已经新建了一个文件test.txt并且提交到Git:

$ git add test.txt

$ git commit -m "add test.txt"
[master b84166e] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

现在有两个情况:

  • Case1:当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了,那就用命令git rm提交到暂存区,并且git commit提交到版本库:
    $ git rm test.txt
    rm 'test.txt'
    
    $ git commit -m "remove test.txt"
    [master d46f35e] remove test.txt
    1 file changed, 1 deletion(-)
    delete mode 100644 test.txt
    
  • Case2:当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制:
	$ git rm --cached test.txt

12.2 恢复删除

恢复删除的前提是版本库里存在:

  • 如果该删除还未git rm提交到暂存区
    $ git checkout -- test.txt
    
  • 如果该删除已经git rm提交到暂存区
    $ git reset HEAD -- test.txt
    

13. 远程仓库(GitHub)

13.1 创建SSH Key

首先需要注册好一个GitHub 账号,然后通过本地仓库和远程仓库(GitHub)关联,由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

	$ ssh-keygen -t rsa -C "youremail@example.com"

这里需要把邮件地址换成自己的邮件地址,然后一路回车即可(密码就默认不设置了)

13.2 GitHub添加SSH Key

打开GitHub,然后点击你的个人头像“change you avatar”,然后如图所示操作:
在这里插入图片描述
这里注意的是,你的SSH Key(公钥))在你的用户主目录(C:\Users\username.ssh)里的一个id_rsa.pub文件,打开后复制粘贴过去即可。
在这里插入图片描述

13.3 添加远程仓库

当你需要把你的本地文件上传到GitHub时,需要再GitHub上新建一个仓库,假设名为MyRepo,然后使得你的本地仓库和其关联:

	$ git remote add origin git@github.com:username/MyRepo.git

其中username是你的GitHub账号名称,其中origin是远程仓库名称,一般都是使用该名称
或者

	$ git remote add origin URL

其中URL是你想加入的仓库的连接
下一步就可以把本地库的所有内容推送到远程仓库去:

	$ git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,直接使用git push origin master

13.4 SSH 警告

当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

这个警告只会出现一次,后面的操作就不会有任何警告了,因为在你的用户主目录((C:\Users\username.ssh))里已经多了一个文件known_hosts,里面记录了GitHub的服务器ip地址

13.5 删除远程仓库

当你不想要关联这个远程仓库的时候,只需要使用remove命令删除即可:

	$ git remote remove origin

这个命令是删除远程仓库的origin分支
然后可以查看远程仓库还是否存在:

	$ git remote -v

查看所有远程分支

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值