Git学习笔记

  • Git安装(略)及全局配置

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:

$ git config --global user.name "Your Name"

$ git config --global user.email "email@wxample.com"

 

  • 创建版本库及简单操作

1. 选择位置,创建空目录,pwd显示当前目录

$ mkdir GitWork

$ cd GitWork

$ pwd

/d/GitWork/GitWork

2. 通过git init命令把这个目录变成Git可以管理的仓库

$ git init

Initialized empty Git repository in D:/GitWork/GitWork/.git/

3. 如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

 

4. 把文件添加到版本库,编写readme.txt文件写入如下内容,将文件放到GitWork目录下。

Git is a distributed version control system.

Git is free software distributed under the GPL.

Git has a mutable index called stage.

Git tracks changes of files.

 

5. 用命令git add告诉Git,把文件添加到仓库,用命令git commit告诉Git,把文件提交到仓库-m后面输入的是本次提交的说明

$ git add readme.txt

$ git commit -m "wrote a readme file"

[master (root-commit) f94b02a] wrote a readme file

 1 file changed, 4 insertions(+)

 create mode 100644 readme.txt

 

6. 将文件readme.txt文件内容修改如下:

Git is a distributed version control system.

Git is free software distributed under the GPL.

Git has a mutable index called stage.

Git  A tracks changes of files.

 

7. git status命令看看结果,它将告诉我们readme.txt被修改过了,但还没准备提交的修改。

$ git status

On branch master

Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)

 

        modified:   readme.txt

 

no changes added to commit (use "git add" and/or "git commit -a")

 

8. 使用指令git diff查看readme.txt被修改的的内容。

$ git diff readme.txt

diff --git a/readme.txt b/readme.txt

index 9a8b341..8d5a901 100644

--- a/readme.txt

+++ b/readme.txt

@@ -1,4 +1,4 @@

 Git is a distributed version control system.

 Git is free software distributed under the GPL.

 Git has a mutable index called stage.

-Git tracks changes of files.

\ No newline at end of file

+Git  A tracks changes of files.

\ No newline at end of file

 

9. 将修改后的readme.txt提交到版本库。

$ git add readme.txt

$ git commit -m "add A"

[master 03545ad] add A

 1 file changed, 1 insertion(+), 1 deletion(-)

 

10. 查看状态

$ git status

On branch master

nothing to commit, working tree clean

11. 版本回退

$ git log    查看版本记录(如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数)

$ git reset --hard HEAD^    退回上个版本,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

$ git reset --hard 1094a    退回对应ID的版本

$ git reflog    命令git reflog用来记录你的每一次命令,用于回到退回版本之前的版本

 

  • 常用指令

$ git ls-files -d | xargs -i git checkout {}  //同时恢复多个被删除的文件

$ git rm * -r //记得,cd 到你要删除的目录下。当然 * 可以换成指定目录

$ git init  // 初始化一个Git仓库
$ git status   // 查看仓库的状态
$ git add .   // 将所有修改添加到暂存区
$ git add *  // Ant风格添加修改
$ git add *Controller   // 将以Controller结尾的文件的所有修改添加到暂存区
$ git add Hello*   // 将所有以Hello开头的文件的修改添加到暂存区 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...
$ git add Hello?   // 将以Hello开头后面只有一位的文件的修改提交到暂存区 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不会被添加的
可以多次添加然后在提交
$ git commit -m "comment"  // 将暂存区的修改提交到仓库 后面添加上有意义的注视信息
$ git diff  file  // 在file被修改了还未提交的时候查看修改的部分(和版本库中最新版本的不同 diff == difference 不同)
$ git log  // 查看git的commit信息,每次提交的信息包括注视在内,从最新提交到最久提交
$ git log --pretty=oneline   // 将commit 信息简化成一行显示
注意Git的版本号(commit id)是SHA1值ea34578d5496d7dd233c827ed32a8cd576c5ee85
$ git reset --hard HEAD^   // 退回到相对于当前版本的上一个版本 HEAD 表示当前版本
$ git reset --hard HEAD^^  // 退回到相对于当前版本的上上一个版本  HEAD 代表当前版本
$ git reset --hard HEAD~100 //退回到相对于当前版本的上 100 个版本去  HEAD 表示当前版本
$ git reset --hard 3628164  // 退回到指定的版本   这里不需要全部写commit id  Git 回去自动适配
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
$ git reflog   // 在退回到旧版本之后可以查看旧版本之前的提交日志
当我们想从一个旧版本退回到新版本但是我们关闭了shell窗口,不能查看之前的commit id了,就可以通过
$ git reflog 查看到之前的版本的commit id

$ git rm file  // 从git版本库中删除文件
$ git commit -m "delete file" // 提交删除
$ git checkout file  // 想要从git恢复 会出现:error: pathspec 'README.txt' did not match any file(s) known to git.
$ git reset --hard HEAD^  // 恢复到上一个版本 可以恢复文件

$ ssh-keygen -t rsa -C "youremail@example.com"  // 创建SSH Key

$ git config --global user.name "zhangsan"
$ git config --global user.email "zhangsan@139.com"
$ git remote add origin git@github.com:zhangsan/ylez.git // 添加一个远程仓库
  // add origin 就是添加一个远程仓库
  // git@github.com:zhangsan/ylez.git  是远程仓库的地址
  // git@github.com 主机的地址  我们可以通过GitLab大家自己的git服务器
  // zhangsan 是你的用户名
  // /ylez.git 是你的仓库名
$ git push -u origin master  // 将本地的master分支推送到远程的master分支中
$ git push -u origin dev    // 本地切换到dev分支然后将本地的dev分支推送到远程

$ git clone git@192.168.0.8:zhangsan/test.git  // 讲一个远程的仓库克隆到本地

$ git branch   // 查看git的所有分支
$ git branch dev  // 创建dev分支
$ git checkout dev  // 切换到一个已经存在的分支
$ git checkout -b dev  // 创建dev分支,并切换到dev分支
$ git branch -d dev  // 删除dev分支
$ git checkout master  // 切换到主分支
$ git merge dev   // 将dev分支合并到master分支

标签一般打在master分支上
$ git tag v1.0  // 在当前版本HEAD上打一个名称为v1.0 的标签
$ git tag   // 查看所有标签,会列表出所有的标签名

$ git tag v0.8 59bc1cb // 为commit id 为59bc1cb...的commit打上v0.8 标签

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164  // 为commit id为3628164...的commit打上v0.1 的标签注视内容是version 0.1 released
$ git tag v0.1 //可以查看标签的信息包括文字说明
还可以通过-s用私钥签名一个标签:
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a

用命令git show <tagname>可以看到PGP签名信息:
$ git show v0.2
$ git tag -d v0.1   // 删除标签 v0.1
$ git push -u origin v1.0  // 将标签v1.0 推送到远程仓库
$ git push -u origin --tags   // 一次性推送全部标签
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
Deleted tag 'v0.9' (was 6224937)

然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9

 

  • 工作区和暂存区

工作区(Working Directory):

就是我们通$ git init 创建的代码库的所有文件但是不包括 .git文件(版本库)


暂存区(Repository):

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

我们通过$ git add ./*/*Xxx/Xxxx* 添加的修改,都是进入到暂存区了,肉眼不可见 用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

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

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

 

  • 远程版本库

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key。

 

添加远程库相关指令:(使用clone克隆远程库)

 

$ git remote add origin git@github.com:username(你的用户名)/GitWork.git

$ git push -u origin master

 

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.

这个警告只会出现一次,后面的操作就不会有任何警告了。

 

 

学习参考资料:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

https://blog.csdn.net/u012556150/article/details/50736896

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的书包哪里去了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值