前端修仙路-git篇

Git篇

前言:Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。本文主要介绍git常用的一些命令。


安装

使用git命令,首先需要下载安装 git bash(此处链接为window版本,其他版本需另行下载) 命令行工具。

使用

git链接有两种方式:

  1. https (形如:https://github.com/terryvince/xxx.git)
  2. ssh (形如:git@github.com:terryvince/xxx.git)

两者区别在于,使用前者需要每次提交时输入账号密码,使用后者则需要到本地生成私钥和公钥,公钥需要在所使用的git平台(如github,gitlab等)配置。日常中,一般使用第二种方式,配置一次后,以后就不用输入账号密码也能推送仓库了。如果想要使用第二种,你需要先生成公钥:

> ssh-keygen -t rsa   //生成的公钥路径在~/.ssh/id_rsa.pub

输入以上命令后会出现三次问询,不设密码的话可以回车直接跳过,如果是window系统,生成的公钥在C:\Users\Administrator\.ssh\id_rsa.pub 这个文件里,将该文件内容复制到你所使用的平台上即可(图示为github):

github图示

接下来第二步,如果你是首次使用,你需要配置名字和邮箱,该信息每一次 git 提交都会用到,表明代码是谁写的:

> git config --global user.name "username"
> git config --global user.email "xxx@xxx.com"

如果需要查看配置信息,输入以下命令:

> git config --list   //包括之前配置的用户名和密码信息都在里边

名词解释

  • 仓库:顾名思义,用来储存的地方,又叫版本库,可以放代码文件,也可以放其他的文件。
  • 工作区(working dir):即当前的工作目录,你打开的项目就是一个工作目录。
  • 缓存区(Index):它像个缓存区域,临时保存你的改动
  • HEAD:本地版本库的一个指针,指向当前正在使用的版本库。
  • 分支(branch): 就像是树一样,有不同分支,每个分支的代码都是独立的。在你创建仓库的时候,master 是“默认的”的主分支。在其他分支上进行开发,完成后再将它们合并到主分支上。

图示

基础用法

创建版本库

> mkdir testdir && cd testdir
> git init

第一句命令,表示创建testdir目录并进入该目录,第二句则是初始化并创建了一个本地git仓库

把文件添加到缓存区

> touch readme.md
> git add readme.md   //git add .  “.”表示添加所有文件到缓存区

假如你后悔了,你可以撤销这个操作:

> git rm --cache readme.md

–cache 参数表示不删除文件,只是把文件撤出缓存区,不加的话就会连本地文件一起删除

如果你想要查看当前工作区有哪些文件有修改或变动,你可以:

> git status

这句命令的作用:

  • 可以查看哪些文件改变了但还没有加入缓存区(untracked files)
  • 可以查看哪些文件加入缓存区了,但还没有提交改动(Changes to be committed)
> git stash save "test-cmd-stash"

git stash 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
save 可以附加消息,其他命令如下:

> git stash apply # apply 和 pop等同, 恢复之前保存的内容
> git stash drop stash@{0}  # 移除stash@{0}
> git stash clear	# 移除所有stash
> git stash show [stash@{0}] # 后面可跟stash,表示查看stash和本地的异同

stash适用于临时保存未完成的内容,保持git提交记录的干净,当完成其他任务后再回过头来恢复继续上一次的未完任务。

提交到本地版本库

> git commit -m "这是一段文本注释,解释提交改动了什么,随便写"

假如你又后悔了,你可以重置代码:

> git reset <commitId> --hard
//git reset b5176eace --hard
  • –hard 选项表示丢弃当前工作区的更改,直接代码回滚。
  • –soft,保留当前工作区更改,并回滚代码。

每次commit的时候,git 都会产生一个 commitId,这个commitId,可以通过log命令查看:

> git log --pretty=oneline -3
b5176eace01b3cdc886d09983417a985289e3635 (HEAD -> master, origin/master) update
5d289799e1511606539f0a2512d26bc4092cb50c update
8b7bfb9aafec24c3aa944078393f2d5d3ee4d7cd delete test.js
  • –pretty=oneline 表示在一行显示
  • -number 如果是一个数字,则表示显示前几个

第一列的数字字母就是commitId,这个id可以用做回滚代码时候的参数,commitId通常不必写全。

假如你回退代码(reset)后,仍然感到后悔,想回到未重置前的状态,你还可以查看之前的git操作历史:

> git reflog --pretty=oneline -3
b5176ea (HEAD -> master, origin/master) HEAD@{0}: checkout: moving from dev to master
104cc45 (origin/dev, dev) HEAD@{1}: checkout: moving from master to dev
b5176ea (HEAD -> master, origin/master) HEAD@{2}: commit: update

第一列则是对应历史操作的commitId,你可以很轻松的找到reset之前commitId,然后再重置(reset)一次,就可以逆向回滚回去。

提交到远程仓库

> git push -u origin master //将当前分支的代码提交到远程的主分支上
  • -u 第一次提交带上该选项,其后的每次提交只需要git push即可

如果你不是克隆的仓库,并且是第一次提交,你需要先添加远程仓库:

> git remote add origin git@github.com:terryvince/xxx.git //origin 远程仓库的名字

添加远程仓库后,可以查看有哪些已添加的远程仓库

> git remote
origin

如果想要查看某个远程仓库的地址,可以输入:

> git remote get-url origin
git@github.com:terryvince/xxx.git

如果需要修改地址,可以输入:

> git remote set-url origin git@github.com:terryvince/xxx.git

克隆

克隆就相当于复制,将远程仓库复制到(搬到)本地来,默认只下载了maste分支的代码:

> git clone git@github.com:test/xxx.git

因为是克隆下来的仓库,本地就不需要用init命令来初始化仓库

分支操作

查看所有分支:

> git branch -a
  dev
* master
  remotes/origin/dev
  remotes/origin/master

切换分支:

> git checkout <branch name>
//git checkout develop

特殊用法 ,放弃本地所有未提交的更改

git checkout .

创建并切换分支

> git checkout -b <branch name> <remote branch>
//git checkout -b develop origin/develop
  • -b 表示切换的时候顺便创建分支(develop)
  • <branch name> 创建的本地分支名字
  • <remote branch> 远程分支不是必填的,写了之后新创建的本地分支会自动关联到远程分支上,这样提交的时候就不需要指定分支提交。

假如你已经创建了未关联的分支,你可以手动设置关联:

> git branch --set-upstream-to=origin/master  master
  • –set-upstream-to=origin/master master 表示设置本地的master分支与远程分支origin/master关联。关联目的是在执行git pull, git push操作时,就不需要指定对应的远程分支,你只要没有显示指定,git pull的时候,就会提示你There is no tracking information for the current branch.

删除分支:

> git branch -d <branch name>

合并分支:

> git merge <branch name>

当然,合并分支的时候,很可能会遇到代码冲突,当多人或者两个分支同时更改一处代码时。如果出现代码冲突你需要手动去解决,代码冲突长这个样子:

    <<<<<<< HEAD
    console.log(111)
    =======
    console.log(222)
    >>>>>>> origin/master
  • HEAD 指向的是本地版本库,代表本地的代码
  • “==” 等号分隔了本地和远程的代码,等号下边的是远程分支的代码

不想要的代码直接删了就行了,处理好冲突的地方后,就可以重新提交一次:

> git add .
> git commit -m "解决代码冲突"
> git push

你也可以比较两个文件的异同,在加入缓存区(add)之前:

> git diff <source_branch> <target_branch>

拉取

假如,别人推送了一些代码到远程仓库上,你需要更新本地的代码,你可以:

> git pull

该命令会从远程仓库获取最新的代码,并自动合并到当前分支上,假如你不想要立即合并,你可以执行:

> git fetch <远程主机名> <分支名>

fetch之后,你可以查看fetch分支和当前分支的区别来决定要不要合并:

> git log -p FETCH_HEAD -1
  • -p 查看push修改的内容
  • FETCH_HEAD 代码fetch下来的代码分支
  • -1 只显示最近的一条log

如果决定合并,执行次git merge FETCH_HEAD即可。

标签

在软件发布时创建标签,是被推荐的。

> git tag 1.0.0 1b2e1d63ff
//1b2e1d63ff 要进行标记的commitId

推荐

命令操作git可能有些不便,我们可以图形化git版本工具来方便管理。比如Sourcetree:

sourcetree的图片

此外,常用的编辑器vscode也有一些扩展可用:

  • Git Graph 图形化git
  • GitLens — Git supercharged 这个扩展用来防止别人甩锅,可以在编辑器中清晰的看到某段代码是谁写的,什么时候写的,推荐安装。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值