Git基础Part2
Git基础Part2——操作使用
[TOC]
打开命令行
在win上可以到指定位置使用Git Bash(在指定目录下->右键->Git Bash Here),个人认为比较方便。
配置
查看配置
1 | git config -l |
- Git\etc\gitconfig :Git 安装目录下的 gitconfig –system 系统级
- C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 –global 全局
编辑配置
每次Git提交都会使用该信息。
1 | git config [ --global ] user.name "你的用户名" # 设置用户名 |
使用--global
则为全局系统级别的设置,否则为仓库级别的设置。
仓库与文件
本地仓库搭建
1 | git init # 在当前目录新建一个Git代码库 |
此命令之后目录下生成.git隐藏文件。
首次配置url
建议直接 clone 远端创建好的项目,在其基础上进行开发。
克隆远程仓库
1 | git clone [ url ] # 克隆一个项目和它的整个代码历史(版本信息) |
文件的四种状态
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
1 | git status [filename] #查看指定文件状态 |
一般在IDE中查看即可。
添加文件
1 | git add fileName #指定文件 |
将工作区的文件添加到暂存区
提交文件
1 | git commit -m 'commit message' [ fileName ] |
将暂存区内容提交到本地库
删除文件
1 | git rm 文件名 # 删除缓存区的该文件 |
查看历史记录
1 | git log |
HEAD@{移动到当前版本需要多少步}
前进后退
基于索引值(推荐)
1 | git reset --hard [ commit id ] |
使用 ^ 符号(只能后退)
1 | git reset --hard HEAD^ # 几个 ^ 表示后退几步 |
使用 ~ 符号(只能后退)
1 | git reset --hard HEAD~n # 后退几步 |
soft:
- 仅本地库移动HEAD 指针
mixed:
- 在本地库移动HEAD指针
- 重置暂存区
hard:
- 在本地库移动HEAD指针
- 重置暂存区
- 重置工作区
文件差异比较
1 | git diff 文件名 |
忽略文件
不想把某些文件纳入版本控制中时,可以在主目录下建立”.gitignore”文件。
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
1 | *.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中! |
一般可以使用JetBrain中的插件.ignore来生成。
分支管理
分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 某一分支开发失败,不会对其它分支有任何影响
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
分支操作
- 创建分支
1 | git branch [branch] # 新建一个分支,但依然停留在当前分支 |
- 查看分支
1 | git branch # 列出所有本地分支 |
- 切换分支
1 | git checkout [branch] # 切换分支 |
- 合并分支
相当于把修改了的文件拉过来
1 | git merge [branch] # 合并指定分支到当前分支 |
注意:在a分支里面修改后,要合并到master,就先切换到master,然后合并a。
- 删除分支
1 | git branch -d [branch] # 删除分支,注意在删除分支时要退出该分支 |
解决冲突
- 第一步:编辑,删除特殊标记
<<<
===
- 第二步:修改到满意为止,保存退出
- 第三步:添加到缓存区
git add 文件名
- 第四步:提交到本地库
git commit -m '日志信息'
注意:后面一定不能带文件名
Git 结合Github
创建远程库地址别名
1 | git remote -v #查看远程地址别名 |
推送
1 | git push 别名 分支名 |
克隆
完整的把远程库克隆到本地,克隆下来后不要在主分支里面做开发。clone进行一次,从无到有的过程,更新用pull。
1 | git clone 远程地址 |
拉取
本地存在clone下来的文件 就用pull更新
1 | pull = fetch + merge |
解决冲突
注意:解决冲突后的提交是不能带文件名的
如果不是基于远程库最新版做的修改不能推送,必须先pull下来安装冲突办法解决
rebase
1 | git rebase -i 索引号 |
beyond compare
用软件解决冲突
1 | 1.安装 : |
跨团队合作
代码review之后合并
适用于个人
邀请成员:
Settings
–>Collaborators
–>填写用户名
–>打开链接接受邀请
企业
创建一个组织
方便管理
review
组织做review
通过Pull request
给开源社区共享代码
点击别人仓库的fork 到自己的仓库
– >然后clone下来 修改后推送到远程库
–>点击Pull Request请求
–>Create pull request发消息
Tag标签
为了清晰的版本管理,公司一般不会直接使用commit提交
1 | git tag -a v1.0 -m '版本介绍' #创建本地tag信息 |
SSH 免密登录
- 输入
ssh-keygen -t rsa -C GitHub邮箱地址
- 进入
.ssh
目录,复制id_rsa.pub
文件内容 - 登录GitHub。
Settings
–>SSH and GPG keys
–>New SSH Key
- 回到git通过ssh地址创建。
git remote add 别名 SSH地址