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
。
1 2 3 4
| # 查看文件状态 git status [filename] # 查看所有文件状态 git status
|
忽略文件
在主目录下建立.gitignore
文件,此文件规则如下:
Git基础命令
- 克隆代码
1 2 3 4 5 6
| git clone <url> # 克隆指定分支 git clone -b branchName <url>
# 初始化git项目 git init
|
- 拉取(更新)代码,命令形式:
git pull <远程主机名> <远程分支名>:<本地分支名>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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 2
| git add . git commit -m "message"
|
- 推送远程分支,命令形式:
git push <远程主机名> <本地分支名>:<远程分支名>
1 2 3 4 5
| git push origin head:branchName # 强制推送 git push -f origin head:branchName # 合并分支 git merge [branchName]
|
git pull
可以理解为git fetch
+git merge
,详细说明如下:
1 2
| git fetch origin master # 从远程主机的master分支拉取最新内容 git merge FETCH_HEAD # 将拉取下来的最新内容合并到当前的分支中
|
在merge的时候,会将有冲突不能合并的内容进行提示。
- 合并提交记录
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 本次修改合并到上次提交 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 2 3 4 5 6 7 8 9 10 11 12
| git config [<options>]
git config -l
git config --system --list
git config --global --list
git config --global user.name "Ysfun"
git config --global user.email ""
|
- 分支命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 查看所有分支 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
提交冲突,并推送至远程
- 查看历史
1 2 3
| git log git log -2 # 显示最近两条日志 git log --oneline # 日志单行显示
|
- 版本回退
1 2 3 4 5 6 7
| # 语法格式 git reset [--soft | --mixed | --hard] [HEAD]
# 示例 $ git reset HEAD^ $ git reset HEAD^ hello.php $ git reset 052e
|
- pull rebase
1 2 3 4
| # 修改配置 git config pull.reabse true # 修改全局配置 git config --global pull.rebase true
|