文章目录
git的基本概念
初始化仓库
- 进入项目文件夹下,使用git init 初始化git本地仓库
- 此时目录下会有隐藏的.git文件夹
设置签名
形式
- UserName
- E-mail addr
作用:用来标识不同的开发人员
辨析
- 签名与登录远程仓库的账号没有关系
签名级别
- 项目级别/仓库级别:仅在本地仓库范围有效
- git config user.name UserName
- git config user.email E-mail
- 命令配置的数据保存在 ./.git/config中
- 系统用户级别: 当前操作系统的用户范围
- git config --global user.name UserName
- git config --global user.email E-mail
- 命令配置的数据保存在 ~/.gitconfig 中
- 实际操作显示: 系统级别的签名只有一个,后面的会覆盖前面的
- 级别的优先级
- 就近原则:项目级别 > 系统级别
跟踪文件
-
git status
查看当前仓库状态
[外链图片转存失败(img-zYU6HyCO-1569309221459)(./gitstatus.png)] -
创建文本文件 new.text
-
git add new.text
- 将文件放置到暂存区
-
git rm-cached new.text
- 将文件从暂存区移除
-
git commit [-m comments] new.text
-
将文件提交到仓库中
-
若不加*-m*选项,则git会自动调用vim编辑器强制添加comments,这一步可以通过其他方式略过
-
- git commit -a 可以直接提交所有改变到仓库中,跳过中间提交到暂存区这一步
- 但是只有git add以后的文件才能被git所track,也就是说新文件必须要git add
查看历史版本
- git log [–pretty=online]
- git log [–oneline]
- git reflog
- 三个版本的显示方式及内容略有不同
- git reflog中的HEAD@{num} 中的
num
表示从当前版本移动到此版本需要几步
前进或后退版本
- git reset --hard [版本完整hash值/部分hash值]
- ^ 异或符号
- git reset --hard HEAD^
^
表示后退一个版本,几个^
就代表后退几个版本,- 只能后退版本
- ~ 波浪号
- git reset --hard HEAD~
num
num
是多少,就代表后退多少步- 只能后退
- git reset --hard HEAD~
- git reset的参数:
- –soft 只移动本地库的指针
- –mixed 移动本地库指针,重置暂存区
- –hard 移动本地库指针,重置暂存区,重置工作区
- tips: 重置就是恢复到该版本的状态
- ^ 异或符号
恢复被完全 删除的文件
- 恢复文件需要文件已经至少被提交过一次
- 回到该文件存在的版本
查看本地库与工作区的差异
- git diff [版本] new.text
- 查看本地库版本与工作区之间的差异,默认当前版本
- 不加文件名则显示当前所有的差异
其他命令
- git restore new.text
- 在new.text文件被git跟踪以后,此命令可以撤销文件的修改,让文件恢复到上一次提交的状态
tips
- 红色的文件代表未被track或者修改了未被提交到暂存区
- 绿色的文件代表已经git add 但是还未被commit
- 具体的状态,git status会有明确的提示
- HEAD是一个指针,指向当前工作区的版本
分支
查看分支
- git branch
创建分支
- git branch name
切换分支
- git checkout branchName
合并分支
- 步骤
- 切换到接受合并的分支上
- git merge branch_name
- 例子
- 现在有分支A完成了开发,需要合并到master
- 切换到master分支
- 执行git merge A
冲突解决
-
合并两个分支时,同一个文件的相同位置同时被更改时,将发生冲突
- 发生冲突时,git将在合并的文件中以特殊的字符标识冲突的部分
<<<<< HEAD code1 这部分属于当前分支的内容 ===== code2 这部分属于被合并分支的内容 >>>>> branchName
-
解决冲突时将特殊字符删掉,并根据实际情况对代码做合并(任意编辑器)
-
使用 git add fileName 标记文件的冲突已经解决
-
使用 git commit [-m ‘msg’] 提交,冲突解决,此时不能添加文件名
常用分支
-
master
-
hotfix
-
release
-
develop
-
feature_1
-
feature_2
.
.
. -
feature_n
远程仓库
推送到远程仓库步骤
- 在代码托管网站上创建好仓库
- 本地创建好git项目
- 设置远程仓库地址
- git remote add origin addr/file.git
- 这里的origin代表远端名,并非是关键字
- 将分支推送到远端
- git push origin branchName
- 此时会要求输入用户名和密码
提交本地代码
- git push origin branchName
- 在提交前需要先执行git pull 操作
- 如果不进行pull,发生冲突时,会提交失败
- 需要先处理冲突在提交
从已存在的仓库中clone项目到本地
- git clone addr
- addr从远程仓库处获得
- 完整的下载远程库到本地
- 创建远程仓库的别名
- 初始化本地库
从远端拉取变更
- git pull origin branchName
- fetch 只从远端拉取变更,不更新本地文件
- 可以切换到origin/branchName中查看
- 或者在
FETCH_HEAD
分支中查看
- merge 将通过从fetch获取的变更更新到本地文件,当前工作区所处分支
- git merge origin/branchName(保存fetch获取的变更的分支)
- pull = merge + fetch
- fetch 只从远端拉取变更,不更新本地文件
tips
- git remote -v
- 查看远程仓库地址
- 配置的远程仓库信息保存在./git/config文件中
跨团队协作
fork
操作
- 某个人不属于当前团队,但要对项目作出修改
- 其他人进入当前项目的主页,点击fork
- 然后其他人将代码clone到本地
- 正常修改、提交、上传
- 提交后其他人在自己的仓库里创建
pull request
- 按着网页提示来就行
- 当前团队的负责人审核request,选择操作
SSH免密登录
步骤
本地操作
- 进入当前用户的家目录
- 执行
ssh-keygen -t rsa -C yourEMail
- 此操作前删除.ssh文件夹
- 家目录下会生成.ssh文件夹,进入文件夹
- 复制
id_rsa.pub
文件中的文本 - 设置SSH登录的origin
- git remote add origin_ssh SSH_ADDR
push
时选择origin_ssh
分支
远程仓库操作
- 登录远程仓库,通过获得文本设置
SSH keys
- 选择
Clone with SSH
,复制链接
git文件管理机制
- 内部通过哈希算法来确定文件是否改变
分支领先 [1]
# 位于分支 master
# 您的分支领先 'origin/master' 共 1 个提交。
# (使用 "git push" 来发布您的本地提交)
无文件要提交,干净的工作区
解决:
- 查看分支 git branch
- git reset origin/master
- 重新拉最新代码 git pull