git 用法

前言

别人上班,我摸鱼,别人加班,我摸鱼,然后就写出了这篇 Git 的简单使用教程。

摸摸索索一个多月总算是完成了这篇 git 的学习笔记 😂, 还好最后还是坚持了下来,可能有些有问题,欢迎各位大佬指正。欢迎关注我的公众号, 微信搜索 「前端入坑手册」,大家一起学习呀😁

准备

  1. 首先需要生成 ssh 秘钥,ssh-keygen -t rsa -C "你公司内部邮箱地址" ,如果成功,将会在~/.ssh文件夹下生成对应的私钥和公钥。
    ls
    在这里插入图片描述

  2. 复制id_rsa.pub文件的内容(如果是 GitHub)到setting -> SSH and GPG keys-> New SSH key 并保存

记住放到 GitHub 上的是公钥

  1. 全局配置账号
git config --global user.name "xxxx"
git config --global user.email "xxxx"

完成以上步骤后,就可以愉快的 pull 或 push 代码了。和 https 拉取方式不同的是,https 方式需要每次提交前都手动输入用户名和密码,ssh 的方式配置完毕后 Git 都会使用你本地的私钥和远程仓库的公钥进行验证是否是一对秘钥,从而简化了操作流程。

基础篇

​ 初始化一个 git 仓库,使用命令git init ,会在项目下生成一个.git 的文件夹,这就是 Git 的版本库

前情提要:git 有工作区和暂存区之分

工作区:就是我们项目所在的区域

暂存区:git add 操作之后,实际就是将工作区的内容添加到暂存区

git add

将工作区的更改,添加到暂存区

# 添加指定文件,后面可跟多个文件,以空格分开
git add <具体的文件名或某个文件下的所有内容>
# 添加项目下的所有文件
git add .

git commit

将暂存区的内容提交到当前分支,也就是本地仓库

# 会打开一个可编辑区域
git commit
# 直接将备注添加在后面
git commit -m "xxxx"
# 等价于git add && git commit
git commit -am "xxxx"
# 对最近一次的提交信息进行修改,会更改hash值
git commit --amend

git push

将本地分支发布到远端分支

  • 常用命令
# 不带参数的push。注意 —— git push 不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关
git push
# 将本地的dev分支,发布到远端同名的dev分支
git push origin dev
# 将本地当前分支,发布到远端与本地当前分支同名的分支上
git push origin
  • 进阶命令

格式:git push origin <source>:<destination>

source 可以是任何 Git 能识别的格式,例如:HEAD~2foo^2

# 将本地dev分支上的dev^处发生的更改提交到远端分支feat
git push origin dev^:feat

git pull

拉取远端更新分支到本地

  • 常用命令
# 不带参数的pull。 将远端origin上的master上的更新拉取到本地,并与本地的master分支进行合并
git pull
git pull origin
  • 进阶命令

同样git pull也可以使用<source>:<destination>格式
格式:git pull origin <source>:<destination>

source 可以是任何 Git 能识别的格式,例如:HEAD~2foo^2

# 拉取远端分支上的更新并与本地的某个分支进行合并
git pull origin master:dev

git fetch

将远程主机的最新内容拉取到本地,但不会合并

# 默认远程主机是origin
git fetch
# 拉取所有远程主机上的更新,默认是origin
git fetch --all
# 拉取远程主机origin上dev分支最新的更新
git fetch origin dev

git merge

将两个或多个分支进行合并,并生成一个新的提交记录,保留合并历史

# 假设在master分支,以下命令,就是在说,将dev分支合并到master上
git merge dev
# -ff 指fast-forword, 默认采用模式。使用这种模式,不会创建新的commit节点
git merge --ff -m "添加一些message"
# --no-ff fast-forword模式下,仍会创建一个新的commit节点。这是合并一个tag时的默认行为
git merge --no-ff -m "添加message"

执行git pull命令,实际就是git fetch + git merge

git rebase

是另一个合并分支的命令,其实际上就是取出一系列的提交记录,”复制“它们, 然后在另外一个地方着个的放下去。

  • 合并分支
# 当前分支topic
# 		A---B---C topic
#	 /
# D---E---F---G master
#执行以下任意一条命令
git rebase master
git rebase master topic
# 								A'--B'--C' topic
# 							/
# D---E---F---G master
  • git rebase --abort: rebase时,发生冲突,可以用来阻止rebase
  • git rebase --continue: rebase时, 解决了冲突后,用来继续rebase
  • git rebase -i: 合并多个commit 记录
  • git pull --rebase = git fetch + git rebase

git checkout

这是一个强大的命令,可以做很多事

  • 创建新的分支

    git checkout -b dev : 基于当前分支创建一个新的dev分支,并切换到dev分支

    git checkout -b dev master: 基于master分支创建一个新的dev分支,并切换到dev分支

    等价于git branch -b dev

  • git checkout dev: 切换分支, 切换到dev分支

    等价于git branch dev

  • git checkout <file>: (file可以是个"点", 表示撤销所有文件的更改)撤销工作区中的指定更改,不包含未被git监控的文件

    等价于git restore <file>

    如果需要撤销暂存区的更改,可以使用git restore --staged <file>

git cherry-pick

如果你只需要某个分支的部分提交代码,就可以考虑使用这条命令

  • git cherry-pick <commit>
# 当前分支 master (以下字母代表commit hash)
# 			e - f - g dev
# 		/
# a - b - c - d master
# 倘若master分支只需要dev分支上的本分提交, 可以使用以下代码
git cherry-pick e...f
# 			e - f - g dev
# 		/
# a - b - c - d - e' - f' master
  • git cherry-pick <branch> : 命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。
  • git cherry-pick --abort: 发生代码冲突时,可以阻止合并代码,回到操作前的样子
  • git cherry-pick --continue: 解决代码冲突后,继续进行cherry-pick 命令
  • git cherry-pick --quite : 发生代码冲突后,可以阻止合并代码,但是不会回到操作前的样子

其他命令

git branch

用于分支管理的命令

# 列出所有分支
git branch
# 列出所有分支,并带上最进一次的commit记录
git branch -v
# 创建一个新分支dev
git branch dev
# 删除dev分支
git branch -d dev
# git branch --delete --force的简写,用于强制删除
git branch -D dev
# 基于当前分支复制一个新的分支branch-copy
git branch -c branch-copy
# 基于dev分支复制一个新的分支dev-copy
git branch -c dev dev-copy

git stash

将本地的更改暂存。

当本地发生更改,但还未commit, 又要进行其他操作( 如更新远端最新代码 ),如果直接git pullgit pull --rebase 会报错,这时,就需要我们先将更改暂存。

# 将更改暂存起来
git stash
# 也可以在暂存时,添加备注
git stash -m "暂存"
# 查看stash了哪些
git stash list
# 取出最近的一次stash, 并删除记录
git stash pop
# 取出指定的stash记录, 不会删除
git stash list
git stash apply <前面list 列出的某一项>
# 删除所有的stash
git stash clear
# 删除指定的一次stash
git stash drop <stash 记录>

如果需要暂存还未被git跟踪的文件,可以先git add 后再git stash

git reset

版本回退,如果是还未提交到远端仓库,可以直接使用git reset 回退,如果已经提交则需要下面提到的git revert

# 回退一个commit
git reset HEAD^
# 向后回退两个commit, 并且丢失回退后的所有commit数据
git reset --hard HEAD~2

git revert

版本回退,会创建一个新的commit记录。

# 撤销最新的commit
git revert HEAD

参考

[1] https://juejin.cn/post/6974184935804534815?share_token=e6867a4f-d921-469d-84e2-e4a3e1810d0f

[2] https://learngitbranching.js.org/?locale=zh_CN

[3] https://www.liaoxuefeng.com/wiki/896043488029600)

[4] https://www.cnblogs.com/hujunzheng/p/9732936.html

[5] https://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值