侧边栏壁纸
博主头像
Ysfun博主等级

一名热爱技术、喜欢折腾的小小程序猿

  • 累计撰写 42 篇文章
  • 累计创建 14 个标签
  • 累计收到 25 条评论

目 录CONTENT

文章目录

Git教程

Ysfun
2022-06-17 / 0 评论 / 0 点赞 / 240 阅读 / 1,340 字

Git基本理论

1. Git工作区域

不同工作区域文件交换的命令

  • Workspace:工作区,平时存放项目代码存放的区域。
  • Index/Stage:暂存区,用于临时存放代码的改动,实际为一个文件,保存即将提交到文件列表的信息。
  • Repository:仓库(本地仓库),保存了所有提交版本的数据。其中HEAD指向最新放入仓库的版本。
  • Remote:远程仓库,托管代码的服务器。

2. Git文件操作

文件的四种状态

  • Untracked:未跟踪,此文件在文件夹中,但未加入到git库,不参与版本控制,通过命令git add将状态变为staged
  • Unmodify:文件已入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处,如果它被修改,则变为Modified;如果使用git rm则移出版本库,则成为Untracked文件。
  • Modified:文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout则丢弃修改,返回到unmoidify状态,其中git checkout即从库中取出文件,覆盖当前修改。
  • Staged:暂存状态。执行git commit则将修改同步到库中,这是库中的文件和本地文件一致,文件为unmodify状态。执行git reset HEAD filename取消暂存,文件状态变为Modified
# 查看文件状态
git status [filename]
# 查看所有文件状态
git status

忽略文件

在主目录下建立.gitignore文件,此文件规则如下:

Git基础命令

  1. 克隆代码
git clone <url>
# 克隆指定分支
git clone -b branchName <url>

# 初始化git项目
git init
  1. 拉取(更新)代码,命令形式:git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin
git pull origin branchName

# 变基(避免出现merge commit记录)
git pull --rebase origin branchName

# 存在代码冲突时,拉取代码步骤
# 1. 拉取代码
git pull --rebase   # 或者全局修改配置git config --global pull.rebase true
# 2. 处理冲突文件
vim test.txt  # 例如冲突文件为test.txt
# 3. 添加修改文件到暂存区
git add .
# 4. 继续变基
git rebase --continue
  1. 提交代码
git add .
git commit -m "message"
  1. 推送远程分支,命令形式:git push <远程主机名> <本地分支名>:<远程分支名>
git push origin head:branchName
# 强制推送
git push -f origin head:branchName
# 合并分支
git merge [branchName]

git pull可以理解为git fetch+git merge,详细说明如下:

git fetch origin master  # 从远程主机的master分支拉取最新内容
git merge FETCH_HEAD     # 将拉取下来的最新内容合并到当前的分支中

在merge的时候,会将有冲突不能合并的内容进行提示。

  1. 合并提交记录
# 本次修改合并到上次提交
git commit --amend   # 会通过core.editor指定编辑器进行编辑
git commit --amend --no-edit  # 不打开命令行,直接提交

# 合并近k条提交记录
git rebase -i head~k

# 一般pick第一条,后面都squash

# 从HEAD版本开始往过去数3个版本
$ git rebase -i HEAD~3

# 合并指定版本号(不包含此版本)
$ git rebase -i [commitid]

说明:

  • -i(--interactive):弹出交互式的界面进行编辑合并
  • [commitid]:要合并多个版本之前的版本号,注意:[commitid] 本身不参与合并

指令解释(交互编辑时使用):

  • p, pick = use commit
  • r, reword = use commit, but edit the commit message
  • e, edit = use commit, but stop for amending
  • s, squash = use commit, but meld into previous commit
  • f, fixup = like “squash”, but discard this commit’s log message
  • x, exec = run command (the rest of the line) using shell
  • d, drop = remove commit
  1. 查看配置信息
git config [<options>]
# list all
git config -l
# 查看系统配置信息
git config --system --list
# 查看个人配置信息
git config --global --list

# 设置用户名
git config --global user.name "Ysfun"
# 设置邮箱
git config --global user.email ""
  1. 分支命令
# 查看所有分支
git branch -a
# 查看本地分支
git branch  # '*'表示当前分支,并以绿色标识
# 查看远程分支
git branch -r
# 查看所有分支详细信息
git branch -vva
# 删除分支
git branch -d [branchName]

# 切换分支
git checkout <branch>
# 创建分支并切换到该分支
git checkout -b <branch>
  1. 代码冲突

代码冲突的解决步骤:

  1. 使用git pull拉取远程代码
  2. 本地处理冲突文件
  3. add -> commit -> push提交冲突,并推送至远程
  1. 查看历史
git log
git log -2  # 显示最近两条日志
git log --oneline  # 日志单行显示
  1. 版本回退
# 语法格式
git reset [--soft | --mixed | --hard] [HEAD]

# 示例
$ git reset HEAD^            # 回退所有内容到上一个版本  
$ git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  
$ git  reset  052e           # 回退到指定版本
  1. pull rebase
# 修改配置
git config pull.reabse true
# 修改全局配置
git config --global pull.rebase true
0

评论区