Git 简单使用及原理

Git

  • 分布式版本控制系统, 不受网络的限制

实用主义

  • 常用命令
  • git clone 克隆项目到本地
  • git config 修改 git 的配置信息
  • git branch 修改,配置分支
  • git checkout 切换分支
  • git status 查看当前分支中文件变动状态
  • git add 添加文件到暂存区
  • git commit 提交暂存区文件到版本库
  • git push 将本地代码推送到服务器
  • git pull 将服务器最新代码拉取到本地
  • git log 查看 commit 的历史记录
  • git tag 为项目标记里程碑

git clone

从 git 服务器拉取代码

git clone https://xxxxxxxxxx.git

会下载成一个文件夹

git config

一般用来配置开发者的用户名和邮箱

git config user.name xxx
git config user.email xxx
# 必须要在一个 git 管理的项目中才能这样修改, 否则要使用
git config --global user.name xxx
git config --global user.email xxx

每次 commit 代码产生的日志记录就会包括 name 和 email

git branch

创建, 重命名, 查看, 删除项目分支

# 创建一个名为 daily/0.0.0 的开发分支
git branch daily/0.0.0

一般开发都是在开发分支中进行, 开发完成之后合并到主干

# 重命名分支
git branch -m daily/0.0.0 daily/0.0.1
# 查看分支列表
git branch
# 删除分支
git branch -d daily/0.0.1

git checkout

切换分支

git checkout daily/0.0.1

切换到该分支, 后续的操作都是在该分支上进行的

不同分支有不同的.gitignore

git status

查看该分支中的文件变动状态, 是否被修改

git commit 同样有该效果

git status

git add

添加文件到暂存区

# 添加指定文件到暂存区
git add xxx
# 添加所有文件到暂存区
git add .

git commit

体积文件变动到版本库

git commit -m '提交原因'

git push

将本地代码推动到服务器

git push origin daily/0.0.1

origin 代指当前 git 服务器地址, 将当前分支推送到服务器

git pull

将服务器上的最新代码拉取到本地

git pull origin daily/0.0.1

作用是将其他项目成员的改动更新到本地

如果线上代码和本地代码都发生了改动, 如果是不同地方的改动, Git 会自动处理这种改动, 但如果改动的是同一行, 那么就需要手动编辑文件合并代码, 再提交

git log

查看 commit 记录

git log

J ↓ 翻, K ↑ 翻, Q 退出

git tag

为项目标记里程碑

# 标记当前分支
git tag publish/0.0.1
# 推送当前 tag 到线上
git push origin publish/0.0.1

一般是项目完成, 准备上线时, 才会使用 tag 标记

.gitignore

设置 git 不需要推动的文件

创建一个 .gitignore 文件

// 某个文件
demo.html
// 某个文件夹
build/

深入探索

基本概念

工作区(Working Directory)

git clone 下来的文件夹, 最基本的目录

本地版本库(Local Repository)

工作区的隐藏目录.git, 就是本地版本库

暂存区(stage)

位于本地版本库中, 本地版本库中还有 Git 为我们自动创建的第一个分支 master , 以及指向 master 的一个指针 HEAD

远程版本库(Remote Repository)

指 GIt 服务器上对应的仓库, Github or Gitee 仓库就是远程版本库

概念之间关系

image-20220223091041147
image-20220223091050320

主分支(Master)

Git 自动创建的第一个分支, 其他分支开发完成后都要合并到主分支

HEAD

HEAD 指向的就是当前分支的最新 commit

操作文件

git add

git add -i

打开交互式子命令系统, 输入对应序号选择功能, 常用的几个

  • revert: 把已经添加到暂存区的文件从暂存区剔除
  • add untracked: 将新增的文件添加到暂存区
  • patch: 显示当前文件与本地版本库中的差异, 然后自行决定是否添加该修改 git add -p
  • update: 列出工作区 修改删除 的文件列表, 新增 的文件不会被显示,然后选择要 add 的文件 git add -u
  • git add --ignore-removal .: 添加工作区 修改新增 的文件列表, 删除 的文件不会被添加

git commit

git commit -m '第一行原因' -m '第二行原因'
# 修改最新一条提交记录的原因
git commit --amend -m '提交原因'
# 将当前文件改动提交到 HEAD 或分支的历史 ID
git commit -C HEAD

git mv

# 移动或者重命名文件, 目录
git mv a.md b.md -f

将 a.md 重命名为 b.md , 同时添加改动到暂存区, 相当于 移动重命名 命令 + git add 命令

git rm

从工作区和暂存区移除文件

git rm README.md

等于 rm README.nd + git add 操作

git rm src/ -r

允许删除目录文件夹

git status

以简单的方式查看工作区和暂存区的状况

git status -s
# A a.md 表示已经 add 到暂存区
# ?? a.md 表示还没加入到暂存区
# 如果 commit 到本地版本库就查不到了
# 查看工作区和暂存区的情况,包括被 ignored 的文件
git status --ignored

git branch

git branch -a
# 查看本地版本库和远程版本库上的分支列表
git branch -r
# 查看远程版本库的分支列表
git branch -D
# 分支未提交到本地版本库前强制删除分支
git branch -vv
# 查看带有最后提交 id 、最近提交原因等信息的本地版本库分支列表

git merge

git merge --squash

将待合并分支上的 commit 合并成一个新的 commit 放入当前分支, 适用于待合并分支的 commit 记录不需要保留的情况

git merge --no-ff

默认情况下,Git 执行”快进式合并“(fast-farward merge),会直接将 Master分支指向 Develop 分支,使用 --no-ff 参数后,会执行正常合并,在 Master分支上生成一个新节点,保证版本演进更清晰。

image-20220223091103465
git merge --no-edit

在没有冲突的情况下合并,不想手动编辑提交原因,而是用 Git 自动生成的类似 Merge branch 'test' 的文字直接提交

git checkout

git checkout -b daily/0.0.1
# 创建 daily/0.0.1 分支, 同时切换到该分支
git checkout --orphan=new_branch
git checkout --orphan new_branch
# 创建一个临时的新分支,加入创建前源分支上的所有文件,但是当前分支必须要 commit 一次之后才会保存下来
git checkout -p other_branch
# 这个命令主要用来比较两个分支间的差异内容,并提供交互式的界面来选择进一步的操作,这个命令不仅可以比较两个分支间的差异,还可以比较单个文件的差异

git stash

在 git 的栈中保存或修改当前的工作区和暂存区,你在一个分支里做某项功能开发时,接到通知把昨天已经测试完没问题的代码发布到线上,但这时你已经在这个分支里加入了其它未提交的代码,这个时候就可以把这些未提交的代码存到栈里。就相当于临时保存这些你新加入的代码但还没 commit 的代码

git stash
# 将未提交的代码存入栈中
git stash list
# 查看栈中所有记录
git stash show stash@{0}
# 查看栈中指定记录
git stash drop stash@{0}
# 删除一条记录
git stash pop
# 显示并移除栈中最新的的一条记录
git stash apply stash@{0}
# 检测一条记录,但不删除
git stash clear
# 清除所有

git stash branch new_branch
# 检出栈中最新一条记录并放入一个新建的分支中

git stash create
# 为当前改动创建一个临时记录,返回一个 id
git stash store id
# 真正将该记录保存

操作历史

git log

git log -p
# 提交带文件修改对比差异的操作日志
git log a.md
# 显示某个文件的操作日志
git log -10
# 显示最近 10 条日志
git log --pretty=oneline
# 在一行中输出日志

git log --since="2 weeks age"
# 显示两周前到现在的历史记录
git log --before="2 weeks ago"
# 显示截止到两周前的历史记录

git cherry-pick

git cherry-pick id
# 合并 id 分支的提交记录到当前分支末梢

git reset

将当前分支重设 reset 到指定的 <commit> 或者 HEAD

git reset --soft <commit>
# 暂存区和工作区中的内容不作任何改变,仅仅把 HEAD 指向 <commit>
 git reset --hard <commit>
 # 自从 <commit> 以来在工作区中的任何改变都被丢弃,并把 HEAD 指向 <commit>

git rebase

重新定义分支库的版本状态

git rebase branch_name
img

git revert

撤销某次 commit , 此次操作之前和之后的 commit 都会被保留, 并且吧这一次撤销当做一次新的提交

git revert HEAD
# 撤销前一次 commit

git revert HEAD --no-edit
# 同上, 不过以默认的 Revert xxx 为提交原因

git revert -n HEAD
# 撤销多次

git diff

查看工作区,暂存区,本地版本库的差异

git diff

git diff --stat
# 查看统计数据

git reflog

查看所有分支的操作记录,包括 commit 和 reset 还有已经被删除的 commit 记录, 还能查看分支切换记录

git reflog

远程版本库连接

如果在GitHub项目初始化之前,文件已经存在于本地目录中,那可以在本地初始化本地版本库,再将本地版本库跟远程版本库连接起来

git init

当前目录生成 .git 文件夹

git remote

git remote
# 显示所有远程仓库名字
git remote -v
# 显示名字同时显示 url 地址

git remote add 名字 url地址
# 添加新的远程仓库,并指定一个名字
git remote rm 名字
# 删除指定远程仓库

git fetch

拉取远程仓库的所有更新

git fetch origin

git fetch origin daily/0.0.1
# 取回指定分支的更新

git gc

运行Git的垃圾回收功能,清理冗余的历史快照

git archive

将打了 tag 某个版本打包提取

git archive -v --format=zip publish/0.0.1 > v0.1.zip
# --format 表示压缩格式
# -v 表示 tag 名
# 保存到工作区

参考

保姆级Git入门教程,万字详解

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇