Git
总览
- git的工作流程
- git reset HEAD. 等同于git reset --hard HEAD
设置签名
- 项目级别/仓库级别:仅在当前本地库范围内有效
git config user.name tom
git config user.email hello@gmail.com
- 系统用户级别: 登入当前操作系统的用户范围
git config --global user.name tom
git config --global user.email hello@gmail.com
git基础操作
状态查看
git status
查看工作区,暂存区状态
初始化
+ 初始化: git init 文件夹名
+ 初始化: git init # 当前路径全被管理
添加
git add . # 添加所有文件
git add [file name] # 添加指定文件 例如 git add hello.txt
提交
git commit -m "commit message" [file name] or git commit -m "commit message" # 有冲突是不带具体文件名
将暂存区的内容提交到本地库
查看历史记录
git log
git log --pretty=oneline
git log --oneline
git reflog
根据log进行前进/后退
本质
基于索引值操作[推荐]
git reset --hard [局部索引值]
例如: git reset --hard a6ace91
使用^符号: 只能后退
git reset --hard HEAD^
注: 一个^表示后退一步, n 个表示后退 n 步
使用~符号: 只能后退
git reset --hard HEAD~n
注: 表示后退 n 步
reset命令的三个参数对比
--soft参数
仅仅在本地库移动 HEAD 指针
--mixed参数
在本地库移动 HEAD 指针
重置暂存区
***--hard参数***
在本地库移动 HEAD 指针
重置暂存区
重置工作区
删除文件并找回
前提: 删除前, 文件存在时的状态提交到了本地库。
操作: git reset --hard [指针位置]
删除操作已经提交到本地库: 指针位置指向历史记录
删除操作尚未提交到本地库: 指针位置使用 HEAD
比较文件差异
git diff [文件名]
将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本] [文件名]
将工作区中的文件和本地库历史记录比较
不带文件名比较多个文件
分支操作
创建分支
git branch [分支名]
查看分支
git branch or git branch -v
切换分支
git checkout [分支名]
创建并切换分支
git checkout -b dev
删除分支
git branch -d dev
合并分支
第一步: 切换到接受修改的分支(被合并, 增加新内容) 上 git checkout [被合并分支名]
第二步: 执行 merge 命令 git merge [有新内容分支名]
解决冲突
- 冲突的表现(合并分支是可能会产生冲突)
- 冲突的解决
第一步: 编辑文件, 删除特殊符号
第二步: 把文件修改到满意的程度, 保存退出
第三步: git add [文件名]
第四步: git commit -m "日志信息"
注意: 此时 commit 一定不能带具体文件名
忽略文件
- .gitignore windows上后面加个.就行了
忽略文件
- 空文件夹不被管理
- 指定某些文件或者文件夹不被git管理
- 在项目根路径,跟.git文件夹一个路径,新建.gitignore[.],在里面配置
语法:
# 号是注释, 没有用
文件夹名字,表示文件夹忽略,不被管理
/dist 表示根路径下的dist文件夹,不被管理
*.py 表示后缀名为py的文件,都被忽略
*.log*
本地库和远程库
- linux下查看隐藏的文件 ls -la 或者 ls -lA
- 11-18号加------------------------------
- linux下显示/不显示以.开头的隐藏文件 Ctrl + h
- 团队内部协作
- 跨团队协作
创建远程库
- 刚开始最好不要创建readme等文件,防止冲突
创建远程库地址别名
git remote -v 查看当前所有远程地址别名
git remote add [别名] [远程地址]
推送
- 后面的分支是本地仓库的名字
git push [别名] [本地分支名]
克隆
- 命令
git clone [远程地址]
- 效果
完整的把远程库下载到本地
创建 origin 远程地址别名
初始化本地库
团队成员邀请
在setting 下的 collborator-->Add collaborator
copy invite link给其他用户,其他用户登录并访问邀请链接
拉取
pull=fetch+merge
git fetch [远程库地址别名] [远程分支名]
git merge [远程库地址别名/远程分支名]
git pull [远程库地址别名] [远程分支名]
团队内部发生冲突
如果不是基于 GitHub 远程库的最新版所做的修改, 不能推送, 必须先拉取。
拉取下来后如果进入冲突状态, 则按照“分支冲突解决” 操作解决即可。
跨团队协作
- pull request参考链接:https://www.cnblogs.com/eyunhua/p/13215936.html
(外部人员)
- 首先fork别人仓库
- 本地修改,然后推送到远程[自己的远程仓库]
- Pull Request
- New pull request
- Create pull request
(团队人员)
- 查看Pull requests
- 交流
- 审核代码
- 合并代码(Merge pull request, confirm merge)
- 将远程库修改拉取到本地
SSH登录
step1: 进入当前用户的家目录
$ cd ~
step2: 删除.ssh 目录
$ rm -rvf .ssh
step3: 运行命令生成.ssh 密钥目录
$ ssh-keygen -t rsa -C atguigu2018ybuq@aliyun.com
[注意: 这里-C 这个参数是大写的 C]
step4: 进入.ssh 目录查看文件列表
$ cd .ssh
$ ls -lF
step5: 查看 id_rsa.pub 文件内容
$ cat id_rsa.pub
step6: 复制 id_rsa.pub 文件内容, 登录 GitHub, 点击用户头像→Settings→SSH and GPG keys
step7: New SSH Key
step8: 输入复制的密钥信息
step9: 回到 Git bash 创建远程地址别名
git remote add origin_ssh git@github.com:atguigu2018ybuq/huashan.git
step10: 推送文件进行测试