欢迎来访我的博客。

Git的基本操作

其他 小张哥哥 1235浏览 10评论

Git是一代大神Linus Torvalds开发的一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Linus开发支出是为了帮助管理Linux内核开发二开发的一个分布式的版本控制软件。而我们常用的CVS, SVN等泽是集中式版本控制软件。 如下本文中用到的Git的基本操作命令:

  • git init 创建版本仓库

  • git add filename 将文件添加到暂存区

  • git commit -m 创建一个新版本

  • git log 查看操作记录

  • git reset --hard HEAD^ 回退版本

  • git reset --hard HEAD~n 回退到n个版本之前

  • git reset --hard '版本号' 回退到某个版本

  • git reflog 查看简明log

  • git status 查看当前状态,所在分支,是否有未提交的修改

  • git checkout filename 从暂存区中取出某个文件

  • git reset HEAD filename 对于已经添加到暂存区还未commit的某个文件的修改丢弃掉

  • git checkout -b branch_name 创建一个分支并切换到该分支

  • git rm 将删除文件的操作添加到暂存区

1. 安装Git

zcw@zcw:~$ sudo apt-get install git
Reading package lists... Done
Building dependency tree       
Reading state information... Done
......

2. 创建工作区

所谓创建工作区就是创建一个文件夹,用于存放我们的git文件

zcw@zcw:~$ mkdir test
zcw@zcw:~$ cd test
zcw@zcw:~/test$ mkdir git_test
zcw@zcw:~/test$  cd git_test/

3. 创建版本仓库

在创建版本仓库之前,我们可以查看一下我们工作区目录下的内容, 可以发现里面空无一物 创建工作区,直接使用git init命令即可快速创建 创建之后ls -al查看工作区中的内容,可以看到其中多了一个.git的目录

zcw@zcw:~/test/git_test$ git init
Initialized empty Git repository in /home/zcw/test/git_test/.git/
zcw@zcw:~/test/git_test$ ls
zcw@zcw:~/test/git_test$ ls -al
total 12
drwxr-xr-x 3 zcw zcw 4096 6月  25 15:58 .
drwxr-xr-x 3 zcw zcw 4096 6月  25 15:58 ..
drwxr-xr-x 7 zcw zcw 4096 6月  25 15:58 .git

.git目录中存放了Git进行版本控制所需要的文件。

zcw@zcw:~/test/git_test/.git$ ls -al
total 56
drwxr-xr-x  8 zcw zcw 4096 6月  26 11:23 .
drwxr-xr-x  3 zcw zcw 4096 6月  26 11:23 ..
drwxr-xr-x  2 zcw zcw 4096 6月  25 15:58 branches
-rw-r--r--  1 zcw zcw   31 6月  26 11:22 COMMIT_EDITMSG
-rw-r--r--  1 zcw zcw   92 6月  25 15:58 config
-rw-r--r--  1 zcw zcw   73 6月  25 15:58 description
-rw-r--r--  1 zcw zcw   23 6月  26 11:22 HEAD
drwxr-xr-x  2 zcw zcw 4096 6月  25 15:58 hooks
-rw-r--r--  1 zcw zcw  209 6月  26 11:23 index
drwxr-xr-x  2 zcw zcw 4096 6月  25 15:58 info
drwxr-xr-x  3 zcw zcw 4096 6月  25 16:04 logs
drwxr-xr-x 22 zcw zcw 4096 6月  26 11:22 objects
-rw-r--r--  1 zcw zcw   41 6月  26 11:23 ORIG_HEAD
drwxr-xr-x  4 zcw zcw 4096 6月  25 15:58 refs

具体目录中的每个文件的作用,下面简要说明一下:

  • branchs:

  • COMMIT_EDITMSG

  • config: 记录该项目的一些配置信息

  • description:仅供GitWeb程序使用,这里不需要过多的关心

  • HEAD: 该文件指明了git branch(即当前分支)的结果,比如当前分支是master,则该文件就会指向master,但是并不是存储一个master字符串,而是分支在refs中的表示,例如ref: refs/heads/master

  • ORIG_HEAD: 文件指明了远程仓库的当前引用

  • hooks: 主要定义了客户端或服务端钩子脚本, 这些脚本主要用于在特定的命令和操作之前或者之后进行特定的处理

  • index: 保存暂存区的信息,内容包括它只想的文件的时间戳、文件名、sha1值等。

  • info: 保存了一份不希望在.gitignore 文件中管理的忽略模式的全局可执行文件,基本也用不上

  • logs: 则记录了本地仓库和远程仓库的每一个分支的提交记录,即所有的commit对象(包括时间、作者等信息)都会被记录在这个文件夹中,因此这个文件夹中的内容是我们查看最频繁的,不管是Git log命令还是tortoiseGit的show log,都需要从该文件夹中获取提交日志

  • objects: 保存git对象,Git中的文件和一些操作都会以git对象保存,可以分为BLOB, tree和commit三种类型

  • refs: 存储只想数据(分支)的提交对象的指针

4. 版本创建

我们可以在工作区中创建一个文件,然后将其加入到暂存区,然后创建一个版本

zcw@zcw:~/test/git_test$ vi code.txt
zcw@zcw:~/test/git_test$ git add code.txt
zcw@zcw:~/test/git_test$ git commit -m '第一个版本'
*** Please tell me who you are.

Run

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

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'zcw@zcw.(none)')

第一次使用时候会出现如上的错误信息。此时我们需要使用git config命令配置我们个人的用户名和邮箱:

zcw@zcw:~/test/git_test$ git config --global user.name 'zcw'
zcw@zcw:~/test/git_test$ git config --global user.email 'zhangcw0713@163.com'

此时,我们再进行commit就可以成功创建我们的第一个版本:

zcw@zcw:~/test/git_test$ git commit -m '第1个版本'
[master (root-commit) 5663b6e] 第一个版本
 1 file changed, 1 insertion(+)
 create mode 100644 code.txt

5. 查看版本记录

可以通过git log命令查看版本记录

zcw@zcw:~/test/git_test$ git log
commit 5663b6e6510ea433b7cec31d44070be413118e67 (HEAD -> master)
Author: zcw <zhangcw0713@163.com>
Date:   Tue Jun 25 16:04:45 2019 +0800

    第1个版本

其中第1项为版本序列号,第2项目为该版本的创建人,第2项为版本创建日期,最后是我们创建版本时添加的描述信息

6. 版本回退

此时我们可以再修改code.txt文件,然后再创建第二个版本:

zcw@zcw:~/test/git_test$ git log
commit 9241eefd4a51a418e59d7cd0cf3a2e1071d5e7dd (HEAD -> master)
Author: zcw <zhangcw0713@163.com>
Date:   Tue Jun 25 16:08:18 2019 +0800

    第2个版本

commit 5663b6e6510ea433b7cec31d44070be413118e67
Author: zcw <zhangcw0713@163.com>
Date:   Tue Jun 25 16:04:45 2019 +0800

    第1个版本

如果我们此时想回退到我们的第一个版本,此时可以使用git reset命令

zcw@zcw:~/test/git_test$ git reset --hard HEAD^
HEAD is now at 5663b6e 第一个版本
zcw@zcw:~/test/git_test$ git log
commit 5663b6e6510ea433b7cec31d44070be413118e67 (HEAD -> master)
Author: zcw <zhangcw0713@163.com>
Date:   Tue Jun 25 16:04:45 2019 +0800

    第一个版本

如果我们又想到第2个版本,可以在git reset --hard后加上版本序列号

zcw@zcw:~/test/git_test$ git reset --hard 9241eef
HEAD is now at 9241eef 第二个版本
zcw@zcw:~/test/git_test$ git log
commit 9241eefd4a51a418e59d7cd0cf3a2e1071d5e7dd (HEAD -> master)
Author: zcw <zhangcw0713@163.com>
Date:   Tue Jun 25 16:08:18 2019 +0800

    第二个版本

commit 5663b6e6510ea433b7cec31d44070be413118e67
Author: zcw <zhangcw0713@163.com>
Date:   Tue Jun 25 16:04:45 2019 +0800

    第一个版本

如果我们想恢复到某个版本,但是又不知道具体的序列号,此时我们可以通过git reflog查看我们的操作记录:

7. 查看操作记录

使用git reflog可以查看我们过往的操作记录:

zcw@zcw:~/test/git_test$ git reflog
5663b6e (HEAD -> master) HEAD@{0}: reset: moving to 5663b6e
9241eef HEAD@{1}: reset: moving to 9241eef
5663b6e (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
9241eef HEAD@{3}: commit: 第二个版本
5663b6e (HEAD -> master) HEAD@{4}: commit (initial): 第一个版本

8. 工作区和暂存区

对于以上的操作的总结: git add 操作就是把我们修改的文件添加到暂存区中; git commit 操作就是把我们当前暂存区中的文件的修改创建一个新的版本。

9. 撤销修改

对于已经修改的文件,我们想撤销修改,该如何操作呢? 对于已经修改的文件,我们可以分为三类: 第1种,在工作区修改的文件,文件并未添加到暂存区,此时我们可以直接通过git checkout -- filename将暂存区中的文件覆盖当前工作区的文件,从而撤销修改

zcw@zcw:~/test/git_test$ vi code.txt
zcw@zcw:~/test/git_test$ git checkout -- code.txt
zcw@zcw:~/test/git_test$ git status
On branch master
nothing to commit, working tree clean

第2中是已经修改并将修改文件添加到了暂存区,但是并未commit,此时我们需要先使用git reset HEAD filename将该文件在暂存区的状态

zcw@zcw:~/test/git_test$ git reset HEAD -- code.txt
Unstaged changes after reset:
D	code.txt

然后再使用git checkout -- filename撤销工作区中的文件的更改

第3种 文件已经修改完成并且添加到暂存区,然后也commit创建了一个版本记录 此时就只能进行版本回退了(git reset --hard '版本序列号')

10. 对比文件

对比工作区和版本库中的某个文件 git diff HEAD -- filename

对比两个版本的文件 git diff HEAD HEAD^ -- filename

11. 删除文件

rm 删除文件 git rm 将删除的修改添加到暂存区 git commit 确认删除


转载请注明:禅思 » Git的基本操作?

喜欢 (0) or 分享 (0)

我的个人微信公众号,欢迎关注

扫码或搜索:Python后端开发Django

Python后端开发Django

微信公众号 扫一扫关注

结交朋友、一起学习,一起进步。

科波之主

QQ号 386046154 立即加入

添加微信,进行技术交流

专注技术交流, 一同成长进步

我的微信号

如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(10)个小伙伴在吐槽
    1. Ꭲһere arе ѕome t-girls art tһe day time ɑlso.
      escort a paris 2019-08-24 14:23:58 回复
      • Well, I did reduce my virginity at my in-laws' house.
        ELITE VIP COMPANIONS 2019-12-06 05:23:43 回复
        • Search terms or search phrases aгe recognized as keyword phrases.
          web page 2020-01-19 09:14:31 回复
          • Mօѕt Paris escort girls аrе hugely educated.
            Paris asian escorts 2020-02-04 04:37:40 回复
            • Google and othеr search engines have taken notice.
              #1SEO 2020-02-04 16:44:45 回复
              • Runs a hіgher-class escort agency ϲalled Elite Nites.
                paris vip escorts 2020-02-26 09:44:08 回复
                • amoxicillin 250 mg buy amoxicillin - amoxil generic
                  Claytontulky 2021-06-21 01:46:54 回复
                  • neurontin 300 mg pill buy neurontin online - how to get neurontin cheap
                    Claytontulky 2021-06-21 23:25:00 回复
                    • amoxicillin 500 capsule amoxicillin 500 mg without a prescription - buying amoxicillin in mexico
                      Claytontulky 2021-06-22 20:45:03 回复
                      • best over the counter viagra - order viagra online viagra cost
                        Charlesbuift 2021-06-23 18:47:05 回复