git 命令详解
一、简介
- 工作区域(Working Directory):你平时存放项目代码的地方。
- 暂存区域(Stage):用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。
- Git 仓库(Repository):就是安全存放数据的位置,存放你提交的所有版本的数据。其中,HEAD 指向最新放入仓库的版本(这第三棵树,确切的说,应该是 Git 仓库中 HEAD 指向的版本)。
修改文件->git add -> git commit -> git push
Git 的工作流程一般是:
- 在工作目录中添加、修改文件;
- 将需要进行版本管理的文件放入暂存区域;
- 将暂存区域的文件提交到 Git 仓库。
因此,Git 管理的文件有三种状态:已修改(modified
)、已暂存(staged
)和已提交(committed
),依次对应上边的每一个流程。
1 | // 1.初始化Git项目,成功后创建有一个.git隐藏文件 |
在Git中,HEAD是一个指针,它始终指向当前所在的分支的最新提交。
其实所谓的:neiwang、waiwang、origin,都只不过是.git/refs/remotes/下的一个文件夹名称而已.
二、命令详解
1.配置
全局配置文件路径: C:\Users\登录用户名\.gitconfig
文件,内容如下:
1 | [filter "lfs"] |
(1) 配置用户名
设置当前仓库的用户名和邮箱(git只需要用户名和邮箱登录)
git config user.name “New Username”
git config user.email ‘xxx@xx.com’
设置全局用户名(增加 --globa 参数)
git config --global user.name “New Global Username”
(2)查看
1 | git config --global user.name |
2.克隆现有的仓库
git clone <远程库地址>
功能:①完整的克隆远程库为本地库,②为本地库新建origin别名,③初始化本地库
1 | git clone https://github.com/algz/ant-design-pro-vue.git |
3.分支管理
(1) 新建本地分支
git branch <分支名>
1 | >git branch algz |
(2) 查看分支
1 | >git branch // 查看当前本地分支 |
1 | >git branch -r // 查看所有远程分支 |
1 | >git branch -a // 查看本地和所有远程分支 |
(3) 删除分支
-D 不提示直接删除,-d 提示确认再删除。
1 | >git branch -d <分支名> |
(4)合并分支
将<指定分支名>代码合并到当前分支。
1 | >git merge <指定分支名> |
合并时有二种情况:
a. 当前分支没修改,直接提交更改(commit)。
b.当前分支已修改,会出现一个新的merge提交点。
1 | >git rebase <指定分支名> |
合并时的第二种情况,不会出现新的merge提交点,所以建议用rebase.
(5)重置(reset)或恢复(revert)代码到指定提交
重置:
git reset hand HEAD^
二种重置方法:
a.软件重置,代码恢复到指定的提交,保留变更的代码。
b.硬重置,代码恢复到指定的提交,不保留变更的代码。
恢复:
还原代码到指定的提交
git revert <提交>
(6)切换当前分支
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。
git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。
1 | >git checkout algz |
5.推送数据
origin 是仓库链接的别名,只不过仓库链接太长了,直接写链接多不方便,于是就搞了个标记,用它来代表它就是那个仓库链接。
(1)将本地的 master 分支推送到 origin 主机的 master 分支。
1 | git push origin master |
(2)如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:
1 | git push --force origin master |
(3)删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:
1 | git push origin --delete master |
4.回退提交
1 | # git log 按顺序获得提交ID / git reflog 按时间点查看回退,获得提交ID |
eclipse 回退方法:
(1) 回退到指定提交ID
1 | git reset 提交ID; |
(2) 还原修改
Assume unchanged
(3) 推送到远程
三、常见问题
1.git branch -r 远程分支显示不全
[!问题描述:]
git 查看项目远程分支,返回结果很少。但GitHub页面上能看到很多的分支。尝试git remote update,发现结果仍然如此。
PS
1 | C:\Users\dell\go\src\k8s.io\kubernetes> git remote update |
原因分析:
当初拉取项目时,使用了 git clone --depth=1 …
If you clone with the --depth parameter, it sets .git/config not to fetch all branches, but only master.
解决方法:
在项目的 .git/config 文件中,修改一行:
You can simply omit the parameter or update the configuration file from / 找到这一行:
1 | fetch = +refs/heads/master:refs/remotes/origin/master |
to / 改成:
1 | fetch = +refs/heads/*:refs/remotes/origin/* |