git的使用从基础到进阶

git基础篇

版本控制系统

本地工作区 add 暂存区 commit(每一次commit都会产生一个新的版本) 本地仓库 push 远程仓库

git代码托管平台

  • https://github.com/
  • https://dev.tencent.com/
  • https://gitee.com

git使用步骤

1、第一次使用git的时候需要执行1-4步,否则直接跳到第五步。

​ 执行 git config --global user.name [用户名,个人空间地址]
git config --global user.name zhangsan

2、执行 git config --global user.email [绑定的邮箱]

3、配置密钥对(公钥和私钥),执行ssh-keygen , 一路回车,就会在c/users/[电脑用户名]/.ssh

目录下生成公钥和私钥,这两个文件千万不要动!!!

4、把公钥复制到线上,在个人设置安全设置里的SSH公钥的位置

5、如果是新创建一个仓库,就执行5-7步,否则直接跳到第八步。初始化一个本地仓库

​ 在本地项目位置执行git init ,在目录里回多出一个默认隐藏的 .git 目录,这个目录不要动!!!

​ git仓库不能嵌套,一个本地仓库对应一个远程仓库

6、创建一个远程仓库

​ 登录gitee,新建公开仓库,其他的选项都不要勾

7、关联本地仓库和远程仓库

git remote add origin [线上仓库的ssh地址]

​ 如果在执行这句话的时候报错:fatal: remote origin already exists. 那么就执行 git remote rm origin,再重新add

8、把本地代码添加到暂存区,git add -A git add .

9、把暂存区的代码提交到本地版本库 git commit -m '[说明这一次提交做的事情]'

10、把本地版本库推送到线上 git push origin master ,在第一次提交的时候需要输入 yes

多人协作创建分支

git clone [仓库地址] 把线上仓库克隆到本地

git checkout -b [文件名] 建立并切换分支

在分支上有修改后

git add .

git commit -m '[说明]'

git push origin [对应文件名]

另外一个人要做的

更新代码
git pull origin [分支名]

附录:常见git命令

git status 查看本地仓库状态

git log 查看提交日志,在commit关键字后面的随机字符串就是版本号

git reset --hard [commitHash] 回退到某个版本

git diff [文件名] 查看文件修改

git branch查看分支

git branch -D [分支名] 删除本地分支

git push origin --delete [分支名] 删除远程分支

git checkout [分支名] 切换分支

进阶篇

如果你已经熟练掌握上面的内容,相信你已经可以胜任日常工作的需求了,但是在开发过程中,我们总能遇到这样那样的问题,仅仅使用上面的方法并不能解决,那就需要更进阶版的git命令了

(一)、重复提交,需要多次commit合并为一个

1、合并最新的更改到上一次更改的commit
git commit --amend 合并本次更改到上一次更改,并且修改commit内容

输入之后按I进入编辑,编辑完成后ESC 并输入 :wq保存
第一行的彩色文字就是需要修改的地方

git commit --amend --no-edit 合并本次更改到上一次更改,并且使用上一次的commit说明

2、合并任意两条或者多条commit

  1. 使用git log查询commit记录,并复制需要修改的那条commit的前一条commitHash
  2. 使用git rebase -i [commitHash],进入commit编辑模式
  3. 可编辑部分为你输入的记录码之后提交的所有记录,将前缀pick更改为squash或者S即可将当前commit合并到上方提交中
    注:在commit编辑模式中总共6种模式:
pick

pick只是意味着包括提交。重新进行命令时,重新安排pick命令的顺序会更改提交的顺序。如果选择不包括提交,则应删除整行。

reword

该reword命令与相似pick,但是使用后,重新设置过程将暂停并为您提供更改提交消息的机会。提交所做的任何更改均不受影响。

edit

如果您选择edit提交,则将有机会修改提交,这意味着您可以完全添加或更改提交。您还可以进行更多提交,然后再继续进行变基。这使您可以将大型提交拆分为较小的提交,或者删除在提交中所做的错误更改。

squash

该命令使您可以将两个或多个提交合并为一个提交。提交被压缩到其上方的提交中。Git使您有机会编写描述这两个更改的新提交消息。

fixup

这类似于squash,但是要合并的提交已丢弃其消息。提交仅合并到其上方的提交中,并且较早提交的消息用于描述这两个更改。

exec

这使您可以对提交运行任意的Shell命令。

3、某一次的提交我不想要了,或者是我想更改信息
依然是git rebase -i只是更改一下前缀、或者删除记录
从这上面的信息不难看出,git rebase -i除了能合并提交之外,还能够编辑或者删除记录,操作完成之后同上ESC+:wq保存退出就可

假如命令写错了,可按照提示输入git rebase --edit--todo来重新编辑命令

(二)、开发进行一半,突然有个紧急需求或者线上bug要处理

这种情况下,可以使用暂时commit当前更改,然后切换分支来进行处理,我相信这也是大多数人的处理方式。
那么,难道就没有更好的方法了?其实是有的,这个方法就是
git stash 将当前未保存的更改保存至本地的堆栈中,按中文说法叫储藏;
使用git stash之后使用git stash pop可以将你最新的一条储藏的更改恢复
那么操作流程是:
1、git stash储藏当前更改
2、进行你需要做的临时更改,并提交
3、使用git stash pop将储藏的更改恢复,继续你的开发

当然,这只是简单方法,要想用的灵活就需要
1、使用git stash save [你要对此次更改进行的备注] 进行储存,区别是可以加上备注防止遗忘(因为可以储藏多条记录)
2、切换做其他的这个不说了
3、git stash list查看已经保存的记录
4、git stash apply stash@{要恢复的序号} 恢复你想恢复的操作区进行后续操作

其余关于git stash的命令
git stash drop + 名称 删除某指定stash
git stash clear 清除堆栈所有储藏记录
git stash show 查看最新的储藏记录和当前文件的差异

(三)、开发时突然发现别人已经提交的一个功能自己刚好能用或者是想似

大多说情况下,我们可能会采用ctrl+c和ctrl+v的模式来进行这项操作,当然这样做也不是不行,但是如果是公共模块并且改动很多的情况下这样肯定不行。
这个时候,肯定有人想到了git pull如果只是一个新提交,pull一下也行,但是如果是多个提交呢,而你只想要其中一个提交,这时候我们该怎么办呢?
这个时候我们就要用到一个新的命令git cherry-pick
git cherry-pick [commitHash/分支名]就是将指定的提交(commit)或者分支应用于其他分支
Cherry pick 支持一次转移多个提交。(亲测试ok)
git cherry-pick
git cherry-pick A..B 转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。

注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
git cherry-pick A^..B

(四)、使用上述的操作发生冲突了

以上的操作冲突之后的操作方式大体上是一致的
(1)、–continue
用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让过程继续执行。
git rebase --continue
git cherry-pick --continue
(2)、–abort
发生代码冲突后,放弃合并,回到操作前的样子。
git rebase --abort
git cherry-pick --abort
(3)、–quit
发生代码冲突后,退出操作,但是不回到操作前的样子。(不及建议使用)
git rebase --quit
git cherry-pick --quit

分支合并

我们通常在拉去其他分支代码的时候执行的是git pull命令,这个操作其实是由两个命令构成的
git pull = git fetch + git merge FETCH_HEAD
假设当前master的提交如下:

在这里插入图片描述

如果是你或者你的同事在cid2点,开发进度是cid20(或者突然撇出一个分支,假设是tmp分支),此时要把cid20提交到master

git的使用从基础到进阶_第1张图片

在master执行git merge tmp,然后会得到如下结果:
git的使用从基础到进阶_第2张图片

新增了一次提交记录cid6, 似乎也没有什么问题。如果你装了git可视化工具,查看提交日志,会发现分支上有各种分叉,看起来很乱。

但是假如你使用git pull --rebase命令来进行更新合并就会是另外一种现象。git pull --rebase也是两个命令的合并
git pull --rebase = git fetch + git rebase FETCH_HEAD
在这里插入图片描述
可以看出这样不会有多余的分叉出现,从头到尾只有一条线

当然,这两种合并分支的方式各有优劣
git merge 直接合并两个分支,并产生分支合并的操作记录,会标明分支切入切出的源头
git rebase 変基合并分支,不会产生合并记录
如果是参与人员少,并且要记录所有的操作记录,建议直接merge
如果是参与人员多,方便各种版本管理,建议使用rebase

Git 命令速查表

1、常用的Git命令

命令

简要说明

git add

添加至暂存区

git add–interactive

交互式添加

git apply

应用补丁

git am

应用邮件格式补丁

git annotate

同义词,等同于 git blame

git archive

文件归档打包

git bisect

二分查找

git blame

文件逐行追溯

git branch

分支管理

git cat-file

版本库对象研究工具

git checkout

检出到工作区、切换或创建分支

git cherry-pick

提交拣选

git citool

图形化提交,相当于 git gui 命令

git clean

清除工作区未跟踪文件

git clone

克隆版本库

git commit

提交

git config

查询和修改配置

git describe

通过里程碑直观地显示提交ID

git diff

差异比较

git difftool

调用图形化差异比较工具

git fetch

获取远程版本库的提交

git format-patch

创建邮件格式的补丁文件。参见 git am 命令

git grep

文件内容搜索定位工具

git gui

基于Tcl/Tk的图形化工具,侧重提交等操作

git help

帮助

git init

版本库初始化

git init-db*

同义词,等同于 git init

git log

显示提交日志

git merge

分支合并

git mergetool

图形化冲突解决

git mv

重命名

git pull

拉回远程版本库的提交

git push

推送至远程版本库

git rebase

分支变基

git rebase–interactive

交互式分支变基

git reflog

分支等引用变更记录管理

git remote

远程版本库管理

git repo-config*

同义词,等同于 git config

git reset

重置改变分支“游标”指向

git rev-parse

将各种引用表示法转换为哈希值等

git revert

反转提交

git rm

删除文件

git show

显示各种类型的对象

git stage*

同义词,等同于 git add

git stash

保存和恢复进度

git status

显示工作区文件状态

git tag

里程碑管理


2、对象库操作相关命令

命令

简要说明

git commit-tree

从树对象创建提交

git hash-object

从标准输入或文件计算哈希值或创建对象

git ls-files

显示工作区和暂存区文件

git ls-tree

显示树对象包含的文件

git mktag

读取标准输入创建一个里程碑对象

git mktree

读取标准输入创建一个树对象

git read-tree

读取树对象到暂存区

git update-index

工作区内容注册到暂存区及暂存区管理

git unpack-file

创建临时文件包含指定 blob 的内容

git write-tree

从暂存区创建一个树对象


3、引用操作相关命令

命令

简要说明

git check-ref-format

检查引用名称是否符合规范

git for-each-ref

引用迭代器,用于shell编程

git ls-remote

显示远程版本库的引用

git name-rev

将提交ID显示为友好名称

git peek-remote*

过时命令,请使用 git ls-remote

git rev-list

显示版本范围

git show-branch

显示分支列表及拓扑关系

git show-ref

显示本地引用

git symbolic-ref

显示或者设置符号引用

git update-ref

更新引用的指向

git verify-tag

校验 GPG 签名的Tag


4、版本库管理相关命令

命令

简要说明

git count-objects

显示松散对象的数量和磁盘占用

git filter-branch

版本库重构

git fsck

对象库完整性检查

git fsck-objects*

同义词,等同于 git fsck

git gc

版本库存储优化

git index-pack

从打包文件创建对应的索引文件

git lost-found*

过时,请使用 git fsck –lost-found 命令

git pack-objects

从标准输入读入对象ID,打包到文件

git pack-redundant

查找多余的 pack 文件

git pack-refs

将引用打包到 .git/packed-refs 文件中

git prune

从对象库删除过期对象

git prune-packed

将已经打包的松散对象删除

git relink

为本地版本库中相同的对象建立硬连接

git repack

将版本库未打包的松散对象打包

git show-index

读取包的索引文件,显示打包文件中的内容

git unpack-objects

从打包文件释放文件

git verify-pack

校验对象库打包文件


5、数据传输相关命令

命令

简要说明

git fetch-pack

执行 git fetch 或 git pull 命令时在本地执行此命令,用于从其他版本库获取缺失的对象

git receive-pack

执行 git push 命令时在远程执行的命令,用于接受推送的数据

git send-pack

执行 git push 命令时在本地执行的命令,用于向其他版本库推送数据

git upload-archive

执行 git archive –remote 命令基于远程版本库创建归档时,远程版本库执行此命令传送归档

git upload-pack

执行 git fetch 或 git pull 命令时在远程执行此命令,将对象打包、上传


6、邮件相关命令

命令

简要说明

git imap-send

将补丁通过 IMAP 发送

git mailinfo

从邮件导出提交说明和补丁

git mailsplit

将 mbox 或 Maildir 格式邮箱中邮件逐一提取为文件

git request-pull

创建包含提交间差异和执行PULL操作地址的信息

git send-email

发送邮件


7、协议相关命令

命令

简要说明

git daemon

实现Git协议

git http-backend

实现HTTP协议的CGI程序,支持智能HTTP协议

git instaweb

即时启动浏览器通过 gitweb 浏览当前版本库

git shell

受限制的shell,提供仅执行Git命令的SSH访问

git update-server-info

更新哑协议需要的辅助文件

git http-fetch

通过HTTP协议获取版本库

git http-push

通过HTTP/DAV协议推送

git remote-ext

由Git命令调用,通过外部命令提供扩展协议支持

git remote-fd

由Git命令调用,使用文件描述符作为协议接口

git remote-ftp

由Git命令调用,提供对FTP协议的支持

git remote-ftps

由Git命令调用,提供对FTPS协议的支持

git remote-http

由Git命令调用,提供对HTTP协议的支持

git remote-https

由Git命令调用,提供对HTTPS协议的支持

git remote-testgit

协议扩展示例脚本


8、版本库转换和交互相关命令

命令

简要说明

git archimport

导入Arch版本库到Git

git bundle

提交打包和解包,以便在不同版本库间传递

git cvsexportcommit

将Git的一个提交作为一个CVS检出

git cvsimport

导入CVS版本库到Git。或者使用 cvs2git

git cvsserver

Git的CVS协议模拟器,可供CVS命令访问Git版本库

git fast-export

将提交导出为 git-fast-import 格式

git fast-import

其他版本库迁移至Git的通用工具

git svn

Git 作为前端操作 Subversion


9、合并相关的辅助命令

命令

简要说明

git merge-base

供其他脚本调用,找到两个或多个提交最近的共同祖先

git merge-file

针对文件的两个不同版本执行三向文件合并

git merge-index

对index中的冲突文件调用指定的冲突解决工具

git merge-octopus

合并两个以上分支。参见 git merge 的octopus合并策略

git merge-one-file

由 git merge-index 调用的标准辅助程序

git merge-ours

合并使用本地版本,抛弃他人版本。参见 git merge 的ours合并策略

git merge-recursive

针对两个分支的三向合并。参见 git merge 的recursive合并策略

git merge-resolve

针对两个分支的三向合并。参见 git merge 的resolve合并策略

git merge-subtree

子树合并。参见 git merge 的 subtree 合并策略

git merge-tree

显式三向合并结果,不改变暂存区

git fmt-merge-msg

供执行合并操作的脚本调用,用于创建一个合并提交说明

git rerere

重用所记录的冲突解决方案


10、 杂项

命令

简要说明

git bisect–helper

由 git bisect 命令调用,确认二分查找进度

git check-attr

显示某个文件是否设置了某个属性

git checkout-index

从暂存区拷贝文件至工作区

git cherry

查找没有合并到上游的提交

git diff-files

比较暂存区和工作区,相当于 git diff –raw

git diff-index

比较暂存区和版本库,相当于 git diff –cached –raw

git diff-tree

比较两个树对象,相当于 git diff –raw A B

git difftool–helper

由 git difftool 命令调用,默认要使用的差异比较工具

git get-tar-commit-id

从 git archive 创建的 tar 包中提取提交ID

git gui–askpass

命令 git gui 的获取用户口令输入界面

git notes

提交评论管理

git patch-id

补丁过滤行号和空白字符后生成补丁唯一ID

git quiltimport

将Quilt补丁列表应用到当前分支

git replace

提交替换

git shortlog

对 git log 的汇总输出,适合于产品发布说明

git stripspace

删除空行,供其他脚本调用

git submodule

子模组管理

git tar-tree

过时命令,请使用 git archive

git var

显示 Git 环境变量

git web–browse

启动浏览器以查看目录或文件

git whatchanged

显示提交历史及每次提交的改动

git-mergetool–lib

包含于其他脚本中,提供合并/差异比较工具的选择和执行

git-parse-remote

包含于其他脚本中,提供操作远程版本库的函数

git-sh-setup

包含于其他脚本中,提供 shell 编程的函数库

你可能感兴趣的:(工具包,javascript,git)