Git基本使用命令

熟悉Git

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git的运用范围很广,会很简单但经常想不起来怎么用,本文档涵盖clone,pull,push,fork,merge等操作。

目录

  • 1 在Github上创建一个测试项目
  • 2 下载代码
  • 3 提交更新
  • 4 上传代码
  • 5 Git仓库更新代码
  • 6 新建分支
  • 7 切换分支
  • 8 版本回退
  • 9 .gitignore

前期准备

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。

创建测试项目

  • 首先在Github中创建一个test项目用于Git操作的测试


  • 然后获取远程仓库的url(下图红框部分),之后会通过这个地址连接至服务器端。

下载代码

  • 在要进行Git管理的文件夹下 右键->Git Bash Here 调出命令行界面
    命令行界面
  • 命令行界面可以使用任何终端(Terminal)界面,然后切换至相应文件夹下即可。
  • 第一次的代码下载非常的简单,只需运行命令 git clone [url] 等待运行结束即可。这里的url为上文远程仓库的地址。
$ git clone https://github.com/marchshi/test.git

执行完这条命令后,就可以得到远程存储库的全部文件。

Git是一个开源的分布式版本控制系统,每个开发者通过克隆,在本地机器上拷贝一个完整的Git仓库。

提交更新

在项目中有一个 /.git 的隐藏文件夹,它是Git的版本库,存储着版本变动的全部信息。其中有三个重要内容:版本变动信息,指向当前commit的HEAD指针,暂存区。

我们向Git版本库添加文件要分两步进行的:将文件修改添加到暂存区,将暂存区的内容提交到当前分支。

将文件添加到暂存区
  • 在项目中新建一个文件
$ touch newfile.txt
  • 将此文件添加至暂存区中
$ git add newfile.txt
  • 使用git status 命令查看当前暂存区中的内容
$ git status
On branch master
Your branch is up-to-date with 'test/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   newfile.txt

上面显示我们较之前的commit多了一个newfile.txt的文件。

commit提交更改

git commit 命令可以直接将暂存区的文件进行提交.-m 参数可以对提交添加描述

$ git commit -m "first commit"
[master 2a57bdf] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 newfile.txt

命令执行完就提交成功了,。此时暂存区中没有任何文件。

$ git status
On branch master
Your branch is ahead of 'test/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

需要注意的是,Git绝大多数操作都无需联网,直接在本地版本库进行操作。如果我们要上传代码,就得先使本地分支与远程分支融合,才能向远程分支上传代码。

上传代码

上传代码之前要做好以下准备工作:

  • 查看远端仓库的URL
$ git remote -v
origin  https://github.com/marchshi/test.git (fetch)
origin  https://github.com/marchshi/test.git (push)

如果不存在,可以使用 git remote add <name> <url> 命令添加远程仓库。
PS:可以使用git branch --set-upsteam master origin/master 设置默认上传地址和分支。
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to

  • 查看当前所在的分支
$ git branch
* master
  • 使本地分支与远程分支融合(更新本地代码库)
git pull origin master
  • 提交文件至远程库(别名origin)的master分支
$ git push -u origin master
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 546 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/marchshi/test.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

输入完这条命令后会跳出用户名和密码的输入框,输入你的github账号即可。

至此代码提交成功,我们可以使用git log查看提交信息。

Git仓库更新代码

在更新代码前,要和上传代码前一样,检查远端服务器URL和当前所在分支。

并且用 git status命令查看本地暂存区的信息,确保更新不产生冲突。

$ git status
On branch master
Your branch is ahead of 'test/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

更新代码非常的简单,也是一行命令

$ git pull origin master
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/marchshi/test
 * branch            master     -> FETCH_HEAD
   8f4c1fa..03653e1  master     -> test/master

至此代码更新成功。

新建分支

首先熟悉一些基本命令

  • 列出所有本地分支和远程分支
$ git branch -a
* master
  remotes/test/master
  • 新建一个develop分支
$ git branch develop
  • 切换到新建的 develop 分支
$ git checkout develop
Switched to branch 'develop'
  • 在新的分支进行一次提交
$ touch fileB.txt
$ echo -n "fileB:second commit  branch:develop" > fileB.txt
$ git add fileB.txt
$ git commit -m "second commit"
  • 在远程新建一个develop分支提交本地的develop分支
$ git push origin develop:develop
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 331 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/marchshi/test.git
 * [new branch]      develop -> develop

这里要注意一下:这次提交代码并不需要pull操作。因为新建的分支是本地分支的复制,不存在冲突。

  • 这时我们在查看一下存在的所有分支
$ git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master

这样新建分支并提交代码就完成了。

切换分支

Git可以通过HEAD指针灵活的切换分支,/.git目录下HEAD文件保存着当前版本的指向。

$ cat .git/head
ref: refs/heads/develop

我们可以看见代码指向了 refs/heads/develop 文件,那这个文件的内容又是什么呢?

$ cat .git/refs/heads/develop
5b437a4c89b07e51844463e11558aa24cc6debc8

develop文件又指向了一个SHA-1值,它其实是一个commit对象的索引。我们继续查看。

$ git cat-file -p 5b437a
tree e0f11cc274657c9cc5f48d59b2da15810245ff0c
parent a9f5b0fc23589b3b7b3f97c8e8b8b7a5f6c07b5e
author marchshi <2356250325@qq.com> 1507863623 +0800
committer marchshi <2356250325@qq.com> 1507863623 +0800

second commit

里面保存了此时提交的tree对象的索引,以及父commit的索引,外加一些提交的信息。

那这对我们切换分支有什么帮助呢?其实切换分支就是修改HEAD所指向的commit对象,然后通过commit对象遍历其父commit和文件tree对象进行数据还原。

我们还是通过命令看一下效果

$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
a9f5b0fc23589b3b7b3f97c8e8b8b7a5f6c07b5e
$ git cat-file -p a9f5b0
tree 55fb26b86f99150325059ff02833ed637728ea35
parent d0eb485dded132c8cb98ad0800c1b6d01a89ee6f
author marchshi <2356250325@qq.com> 1507863182 +0800
committer marchshi <2356250325@qq.com> 1507863182 +0800

first commit

这是我们发现HEAD指针已经指向了master分支的first commit对象。接下来就是见证奇迹的时刻~~~

$ ll
total 2
-rw-r--r-- 1 shimanqian 197121 23 十月 13 10:52 fileA.txt
-rw-r--r-- 1 shimanqian 197121  6 十月 13 10:50 README.md

我们可以看到,second commit提交的fileB.txt文件已经消失了,是不是很神奇呢?再重复尝试一下。

$ git checkout develop
Switched to branch 'develop'
$ ll
total 3
-rw-r--r-- 1 shimanqian 197121 23 十月 13 10:52 fileA.txt
-rw-r--r-- 1 shimanqian 197121 35 十月 13 11:34 fileB.txt
-rw-r--r-- 1 shimanqian 197121  6 十月 13 10:50 README.md

至此,切换分支成功。

版本还原

如果发现提交错误,想回退到上一个版本也非常简单。原理和切换分支相同,只要修改HEAD的指向就行。

首先查看一下当前分支的提交记录

$ git log
commit 5b437a4c89b07e51844463e11558aa24cc6debc8
Author: marchshi <2356250325@qq.com>
Date:   Fri Oct 13 11:00:23 2017 +0800

    second commit

commit a9f5b0fc23589b3b7b3f97c8e8b8b7a5f6c07b5e
Author: marchshi <2356250325@qq.com>
Date:   Fri Oct 13 10:53:02 2017 +0800

    first commit

想要切换到哪个commit呢就直接checkout到它的commit-id(前六位)即可。

$ git checkout a9f5b0
HEAD is now at a9f5b0f... first commit
$ cat .git/head
a9f5b0fc23589b3b7b3f97c8e8b8b7a5f6c07b5e

这时就可以版本回退到第一次提交了。当然我们也可以使用HEAD关键字。

$ git checkout HEAD^

该条命令可以直接回退到当前提交的上一次提交,也就是它的父commit。

补充:版本回滚可以新拉一个分支,在新的分支上执行 git reset --head xxx(commet对象名)

打标签

创建一个含附注类型的标签 -a annotated

git tag -a v1.4 -m 'my version 1.4'

.gitignore

当我们上传代码的时候,代码文件夹中有一些第三方的库文件或其他不想上传的文件。我们可以在add的时候挑选出自己想提交的文件,但也可能用更便捷的方式:在.gitignore中标明我们不想提交的文件。这样在git add的时候就会忽略这些文件的存在。
~~~
node_modules/
~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,672评论 1 17
  • 迷雾 突然意识到了出差的一些好处。 经常出了来走走,可以避免陷入一些情绪,习惯自己思维的围墙里,不能自拔 1。我们...
    Deanbian阅读 190评论 0 0