Git版本管理工具学习

前言

由于自己电脑上安装了双系统,在Linux和Win上统一代码版本需要用到这样一个版本控制工具,所以在学习了廖雪峰的Git教程后写了这样一篇博客帮助自己记忆。

分布式 和 集中式

集中式:大家使用共同的一个服务器进行代码库的储存,各自修改之后上交改动
分布式:每个人本地都有完整代码库,可以仅仅通过交换修改的部分进行版本控制

具体使用

Linux上可以直接使用Terminal进行命令输入,Win上使用Git Bash

自爆家门

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

用于让别人知道你是谁

创建版本库(repository)

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

输入(win须无中文父目录):
创建空目录:

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

初始化git,进而该本地仓库可以通过git管理:

$ git init

如果像要对该文件夹中的某个文件进行管理,比如readme.md,可以将其添加入git的管理范畴:

$ git add readme.md

如果觉得已经没问题了,可以使用git commit命令同步到仓库:

$ git commit -m 'write a readme file'

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

如果对该文件进行改动之后,可以使用git status查看改动。如果显示以下结果:

$ 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.md

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

说明文件已经被改动了,但是改动的文件还未传到仓库,所以我们可以通过git diff命令具体查看改动内容:

$ git diff
warning: LF will be replaced by CRLF in readme.md.
The file will have its original line endings in your working directory
diff --git a/readme.md b/readme.md
index d1c6469..e862f7f 100644
--- a/readme.md
+++ b/readme.md
@@ -1 +1,3 @@
 hello git!
+
+i write one more line here

如果知道了修改了哪些内容,就可以放心的传入仓库:

$ git add readme.md
$ git commit -m 'add a new line'

然后不断对代码进行修改,上传,修改,传入,当有一天想知道之前都修改了些啥时,可以通过git log命令获取修改记录,这就是版本控制系统的核心

$ git log
commit 286b269ca98c541c0ff6cb3fb6fca03aa8cc05b6 (HEAD -> master)
Author: allimpossible <zhuangbidafa@gmail.com>
Date:   Mon Feb 25 08:37:05 2019 +0800

    add a new line

commit e074e093ee018099f7ef72b3fc9dc7eb2cdb81b0
Author: allimpossible <zhuangbidafa@gmail.com>
Date:   Mon Feb 25 08:23:50 2019 +0800

    write a readme file

从返回的结果可以看到不同的版本都做了哪些修改,这些修改都是以自己之前commit的形式呈现出来的,所以可见有一个好的commit对于日后的回忆有着多么重要的意义。

版本回退

当自己对目前的版本不满意时,可以使用如下命令回退到上一个版本:

$ git reset --hard HEAD^

HEAD^^则表示上上个版本,HEAD~100表示上100个版本
但是此时如果使用git log命令会发现之前最新的那个版本不在了,如果又想回去的话,可以使用另一种方法:

$ git reset --hard e074e
HEAD is now at e074e09 write a readme file

即通过在 --hard参数后面写版本号(前几位就够了),git就会检索到该版本并进行回溯。
如果忘记了之前的版本号,则可以使用git reflog查看历史操作记录

一些名词解释

工作区(Working Directory)

就是这些代码存放的一个目录,如之前pwd显示的目录。

版本库(Repository)

即那个隐藏目录.git
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。git有暂存区,这是和其他版本控制系统不同的一点。
在这里插入图片描述
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

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

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

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

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

现在如果我们对之前的文件进行一定的修改,并且新增一个文件在当前工作区:

$ 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:   learngit.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	git1.py

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

结果告诉我们,有一个文件被修改了,而有一个文件新增的但是并未被管理,即处于untracked状态,然后我们需要手动将这两个文件add入暂存区。随后如果再commit的话就可以将暂存区的所有文件送到master分支上,此时的工作区状态即为:

$ git status
On branch master
nothing to commit, working tree clean

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。而commit代表的就是下2图的过程:
在这里插入图片描述
在这里插入图片描述

撤销修改

如果在git add或者git commit之后发现自己的文件有问题,有些地方修改错了,现在需要撤回一些操作,就可以使用git checkout -- readme.md命令撤销上一次修改。这时就有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

git checkout -- file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

删除文件

当在工作区删除文件后,如果想在版本库中也删掉,就要使用git rm删掉文件并且将其git commit。如果是误删,可以使用git checkout -- readme.md恢复到最新版本

远程仓库

使用github充当远程代码库进行代码托管

创建SSH-KEY

如果已经有了,则可以跳过下一步:

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

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

登录github,添加SSH

ssh-keys添加
如果想要多台电脑都得到认证,就需要添加每一台电脑的公钥

添加远程库

在这里插入图片描述
目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:

$ git remote add origin gitgit@github.com:idhere/DL-learn.git

添加之后,远程库的名字就是orgin

要将本地的内容推送到远程库保存的话。需要使用git bash命令,其实就是把当前的master的分支推送到了远程。

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

随后如果还想推送新代码的话就只需要如下命令:

$ git push origin master

创建与合并分支

其中指针具体的工作方式见here

  1. 首先是创建dev分支,并切换到该分支
$ git checkout -b dev

-b参数表示创建并切换,相当于将如下两步合起来

$ git branch dev
$ git checkout dev

然后使用git branch命令查看当前分支:

$ git branch
* dev
  master

如果此时对文件进行一定的修改,比如添加几行,然后在dev分支上add , commit之后,使用git checkout master切回master时,之前添加的几行不在了,因为刚刚只是在dev分支上进行的改动。

使用git merge dev命令进行合并:

$ git merge dev
Updating 9f6078e..d54e31d
Fast-forward
 git1.py | 4 ++++
 1 file changed, 4 insertions(+)

git merge命令用于将指定分支合并到当前分支,合并完成过后,就可以删除dev分支了,使用如下命令:

$ git branch -d dev
Deleted branch dev (was d54e31d).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值