Git 入门

起步:

1. 安装:安装过程很简单,根据电脑系统安装即可,官网链接

2. 首次配置

# 配置用户名及邮箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
# 查看配置
$ git config --list

常用Git命令清单(阮一峰)

Git教程(廖雪峰)

关于Git的一个"游戏",边玩边学。


创建/克隆 git 仓库:

定位到项目目录下,运行如下命令。运行后会在本文件夹下创建一个隐藏的 ".git" 文件夹。

# 初始化本地版本库
$ git init
# 设置线上版本库链接的别名为 "origin" (不同步到线上可忽略此操作)
$ git remote add origin https://...
# 查看线上版本库链接的别名
$ git remote -v
# 移除对线上版本库的别名
$ git remote rm [origin name]

 克隆线上项目,则通过 "git clone" 命令,也可以重命名拉取的项目。

$ git clone https://....
# 自定义项目名称
$ git clone https://.... [project name]

概念:

1. "三个区域"

  • 工作区(working directory):就是电脑内能见的文件夹目录
  • 暂存区(staging area):"git add ." 存放的位置
  • 版本库(repository): "git commit -m 'msg' " 把内容提交到当前分支节点上

流程分两步,被修改文件通过 "git add . " 把所有被修改的文件都添加到 暂存区 ,然后通过 "git commit -m 'msg' " 把缓存区的文件提交到 版本库 对应的分支中。涉及的命令如下:

# 查看文件状态
$ git status
# 把所有被修改文件添加 ("."改为文件名可单独添加,多个文件用空格隔开)
$ git add .
# 把暂存区文件提交到版本库 (-m "xxx"表示上传时的预留信息)
$ git commit -m "xxx"
# 把本地版本库及文件推到线上 (忽略 "origin master" 操作当前分支) "origin" 为远程仓库地址的别名,默认就是"origin"
$ git push origin master
# 以暂存区文件覆盖工作区相应文件;带有"HEAD"的命令表示以版本库文件覆盖暂存区及工作区相应文件
$ git checkout --[file name]
$ git checkout HEAD --[file name]
# 移除暂存区的指定文件
$ git rm [file name]

 

2. 分支

 

初始化 git 仓库后,首次提交默认创建一个 "master" 主分支;但首次提交前创建分支,则无 "master" 分支。每个节点均可以创建子分支。

分支的常见用法

  • 多人合作,每个人操作自己的分支,最后操作主分支合并代码。
  • 修复bug,正在开发 "v2.0" 版本,但发现 "v1.0" 版本存在bug,则回到 "v1.0" 节点上,创建子分支修复bug,其他分支继续开发,最后一起合并。

涉及的命令如下:

# 获取所有分支名
$ git branch
# 切换到 "xxx" 分支
$ git branch "xxx"
# 创建&切换到 "xxx" 分支
$ git checkout -b xxx
# 把 "xxx" 分支内容合并到本分支
$ git merge "xxx"

合并分支的冲突处理

假设张三和李四同时在"dev"分支上开发,且修改了相同的代码,则出现上图情况(张三已经push,李四pull后所看到)。"3-9行" 是代码冲突检测的部分,"=====" 上方为本人(李四)修改的代码;下方则是冲突的部分。此时,本地文件已经被修改成上图所示,我们需要做的是:

  • 删除多余符号
  • 删除多余代码
  • 提交修改

改变 HEAD 指针(版本回退/切换分支)前的注意事项

"git reset <commit id>" 把 HEAD 指针指向之前的提交的版本,但工作区的文件并不会改变,所以改变 HEAD 指针前,需要把当前工作区暂存( git stash)。

#### 场景:已在dev分支上开发,但master分支上需要修复bug ####
# 创建临时"储存"区
$ git stash
# 切换到 master 分支
$ git checkout master
# 创建并切换到"debug-101"分支
$ git checkout -b debug-101
### ...对"debug-101"分支修改bug ###
# 切换回master分支
$ git checkout master
# 合并"debug-101"分支的内容
$ git merge --on-ff -m "merge bug debug-101" debug-101
# 切换回"dev"继续开发
$ git checkout dev
# 可查看"stash"的内容,"git stash pop"后查看的为空
$ git stash list
# 取出"stash"
$ git stash pop

普通合并 与 快速合并

### 非快速合并,合并后的会有新的"commit"提交;而 快速合并 则没有。 ###
# 快速合并
$ git merge [branch name]
# 非快速合并
$ git merge --on-ff -m "message" [branch name]

 

3. 撤销/删除/回退:(前提是未git push到远程仓库)

  • 修改了工作区,但未 "git add" 到暂存区:(丢弃工作区)
# 查看文件状态
$ git status
# 丢弃当工作区的前文件,把file恢复到最新的版本库
$ git checkout --[file name]
  • 恢复工作区被删除的文件
# 查看文件状态
$ git status
# 丢弃当工作区的前文件,把file恢复到最新的版本库
$ git checkout --[file name]
# 若确实需要删除文件,并把版本库区域的该文件删除:
$ git rm [file name]
  • 修改了工作区,且"git add"到暂存区,但未"git commit"到版本库:(丢弃工作区并清除暂存区)
# 查看文件状态
$ git status
# 丢弃当工作区的前文件,把file恢复到最新一次 "commit" 版本
$ git checkout --[file name]
# 撤销暂存区(git add)的修改
$ git reset HARD [file name]
  • 修改了工作区,且"git add"到暂存区,并"git commit"到版本库:(版本回退)
# 查看提交的历史信息,'git commit -m xxx'后才会有
$ git log
# 显示单行,开头一大串"乱码"的是commit_id
$ git log --pretty=oneline
# 查看"未来"版本,以便恢复错误回退
$ git reflog
# "HARD"表示当前版本;"HARD^"表示上个版本,如此类推。也可以用commit_id的前几位代替"HARD^"回退到指定版本
$ git reset --hard HARD^

标签管理(git tag):

标签管理用于对某次提交(git commit)进行标记,如特定版本的发布,将其标记为"v1.0"。

# 获取提交记录 (添加 tag 前需要知道 "commit id")
$ git log --pretty --oneline
# 对特定的 "commit id" 打上标签名
$ git tag [tag name] [commit id]
  # 也可以对 当前版本 打上标签
  $ git tag [tag name]
  # 也可以对特定的 标签信息 打上标签
  $ git tag -a <tagname> -m "commit_msg"
# 查看所有 tag
$ git tag
# 查看指定tag的详细信息
$ git show [tag name]
# 删除指定标签
$ git tag -d [tag name]

".gitignore" 配置:

1. ".gitignore" 文件用于 指定某些特征的文件不提交到线上版本库。配置规则如下:

# 忽略指定文件名:
ehthumbs.db
# 忽略指定后缀:
*.db
# 忽略指定目录下的指定文件:
test/test.db

#   具体规则如下:
# 空行不表示匹配,可用于分割,便于可读。
# 以#开头的是注释,如果要在开头使用#号,要转义\#。
# 两端的空格可以忽略。
# !表示否定,前面忽略的文件/目录将会被重新包含。如果父级目录被忽略,则子文件不能被再次包含。
# 如果结尾有/,则表示只匹配目录。比如,a/表示a是目录。
# 如果不包含/,则会全局匹配。比如a,匹配任何目录下的a。
# 通配符*不能跨目录。
# 如果开头有/,则表示匹配根目录。比如,/a表示根目录下的a。
#     关于两个星号**:
# 比如**/a,表示任何目录下的a。
# 比如abc/**,递归匹配abc下的所有文件和目录。
# 比如a/**/b,其中的**表示0到多层目录。
# 其他情况下的两个*属于无效用法

2. 强制提交被忽略的文件

$ git add -f [file name]

3. 检查被忽略文件与 ".gitignore" 内的哪行配置匹配

$ git check-ignore -v App.class
# 若显示".gitignore:3:*.class  App.class",表示第3行的"*.class"匹配了该文件

配置公钥:

已有则无需创建,文件地址: C:user/computerName/.ssh;id_rsa.pub为公钥,id_rsa为私钥 

ssh-keygen -t rsa -C "youremail@example.com"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值