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基础命令
- 克隆代码
git clone <url>
# 克隆指定分支
git clone -b branchName <url>
# 初始化git项目
git init
- 拉取(更新)代码,命令形式:
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
- 提交代码
git add .
git commit -m "message"
- 推送远程分支,命令形式:
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的时候,会将有冲突不能合并的内容进行提示。
- 合并提交记录
# 本次修改合并到上次提交
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
- 查看配置信息
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 ""
- 分支命令
# 查看所有分支
git branch -a
# 查看本地分支
git branch # '*'表示当前分支,并以绿色标识
# 查看远程分支
git branch -r
# 查看所有分支详细信息
git branch -vva
# 删除分支
git branch -d [branchName]
# 切换分支
git checkout <branch>
# 创建分支并切换到该分支
git checkout -b <branch>
- 代码冲突
代码冲突的解决步骤:
- 使用
git pull
拉取远程代码- 本地处理冲突文件
add -> commit -> push
提交冲突,并推送至远程
- 查看历史
git log
git log -2 # 显示最近两条日志
git log --oneline # 日志单行显示
- 版本回退
# 语法格式
git reset [--soft | --mixed | --hard] [HEAD]
# 示例
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
- pull rebase
# 修改配置
git config pull.reabse true
# 修改全局配置
git config --global pull.rebase true
评论区