GIT 安装和使用
2024-08-31 08:27:26
GIT 安装和使用
一、GIT 介绍
Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。
GIT 下载页面 https://git-scm.com/downloads
GIT 工作流程
- Workspace(工作区):就是电脑里看到的目录。
- Stage/Index(暂存区):一般存放在 ".git目录下" 下的index文件中。
- Repository(本次仓库/版本库):工作区有一个隐藏目录.git
- Remote(远程仓库):Github 或者是公司内部搭的服务器
二、GIT 安装
下载完成后,选择安装路径,进行安装,我是用的是Git 2.23.0
选择组件
选择默认编辑器
选择命令行工具
选择客户端
选择安全连接方式
检出和提交换行格式
默认终端
其它选项
实验性功能
安装成功
三、GIT 使用
1. 配置
- 检查是否安装成功。在桌面右击Git Bash Here,出现终端,输入命令
git --version
查看版本号。 - Git 配置文件
- ``/etc/gitconfig
文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有
--system选项的
git config` 时,它会从此文件读写配置变量。 ~/.gitconfig
或~/.config/git/config
文件:只针对当前用户。 可以传递--global
选项让 Git 读写此文件。- 当前使用仓库的 Git 目录中的
config
文件(就是.git/config
):针对该仓库。 - 每一个级别覆盖上一级别的配置,所以
.git/config
的配置变量会覆盖/etc/gitconfig
中的配置变量。 - 在 Windows 系统中,Git 会查找
$HOME
目录下(一般情况下是C:\Users\$USER
)的.gitconfig
文件。 Git 同样也会寻找/etc/gitconfig
文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。
- ``/etc/gitconfig
- 配置用户名和邮箱
- 设置用户名:
git config --global user.name "abc"
- 设置邮箱:
git config --global user.email "xxx@xx.com"
- 查看用户名:
git config user.name
- 查看邮箱:
git config user.email
- 设置用户名:
- 查看当前配置信息
git config --list
- 使用帮助信息
git help 命令
2. 创建版本库
版本库又名仓库,英文名repository,这是一个目录,目录里的文件被Git 管理。所以创建一个版本库只需要在一个空目录里使用 命令即可。
git init
但是要注意,git 只能跟踪文本文件的改动,避免出现编码问题,所有文本最好使用标准的 无BOm 的UTF-8 编码。
添加文件到git 仓库
- 先任意编辑一个文本文档。比如一个readme.txt,随意填写一些内容。
# 首先将文件添加到 sage
git add readme.txt
# 提交到 Repository 的当前分支,我们创建 git版本库的时候,会自动创建一个master 分支。
git commit -m "My first submission."
# 查看还有那些文件没有提交
git status
# 修改readme.txt 文件,可以使用 git status 查看是否有修改。查看workspace 与 Repository,当stage 不是空,对比的是 workspace 和 stage 的差异。
git diff readme.txt
# 显示摘要而非整个 diff
git diff --stat
# 查看 Repository 和 stage 的差异。
git diff --cached readme.txt
git diff --staged
# 查看 Repository 和 workspace 的差异
git diff HEAD -- readme.txt
# 然后再使用以上几步,进行提交
版本回退
# 查看历史记录,记录会按时间顺序逆序展示
git log
# 如果感觉输出信息太多,可以使用参数
git log --pretty=oneline
# HEAD 表示当前版本,id 就是那个很长度字符串。上个版本就是 HEAD^,上上个就是 HEAD^^。以此类推,如果比较多,可以使用 HEAD~100
git reset --hard HEAD^
# 如果要想恢复,需要使用 id,每个人的都不一样,id 不用写完,但是要和已有的不冲突
git reset --hard fb110
# 如果回退后,希望恢复,但是忘记id了,可以查看命令记录,有相应的id号。顺序也是按照时间逆序
git reflog
# 撤销workspace的修改,将Repository的最近文件覆盖workspace。没有--,就变成了“切换到另一个分支”的命令
git checkout -- readme.txt
# 撤销 stage 的修改。使用已提交到Repository的最近文件覆盖stage
git reset HEAD -- readme.txt
# 如果已提交到Repository,则需要使用版本回退
git reset --hard HEAD^
# 自己错删文件,需要恢复
git checkout -- test.txt
# 确定要删除库中的文件
git rm test.txt
git commit -m "remove test.txt"
每次提交的信息以时间逆序排列,HEAD 就是最新记录的指针,可以快速的找到需要的记录。
3. 远程仓库
创建SSH Key
ssh-keygen -t rsa -C "xxx@xx.com"
将用户目录下的.ssh 目录下的公钥内容复制到 https://github.com/settings/keys 中即可,title 任意。
由于现在是 Remote 上的仓库是空的,所以 Repository 连接 Remote
# 将 Repository 与 Remote 相连。添加后,远程库的名字就是origin,这是Git默认的名称。
git remote add origin git@github.com:username/repositoryname.git
# 现象 remote 复制到本地
git clone git@github.com:JackingQueen/FirestTest.git
# 将 Repository 的当前分支 master 推送到 origin
git push -u origin master
4. 分支管理
创建与合并分支
# 创建other1分支
git branch other1
# 切换other1分支
git checkout other1
# 快速创建并切换分支,相当于上面两个命令
git checkout -b other1
# 创建并切换分支也可以使用
git switch -c other1
# 查看当前分支
git branch
# 合并other1分支到当前分支,这次合并是“快进模式(Fast-forward)”,不是每次合并都能Fast-forward
git merge other1
# 切换回 master
git checkout master
# 切换回已有分支也可以使用
git switch master
# 删除 other1分支
git branch -d other1
解决冲突
# 以上是在当前分支要超过合并分支的时候,可以使用快进模式,但是如果两个分支对同一文件进行了不一样的操作,就会出现冲突
git switch -c other2
# 加入新内容 123456789
vi test.txt
git add test.txt
git commit -m "o2 commit"
git switch master
# 加入新内容 123abc
vi test.txt
git add test.txt
git commit -m "master commit"
# 此时将other2 合并到 master将出现冲突,合并失败
git merge other2
# 使用命令查看冲突文件
git status
# 活着使用 git log 来看
git log --graph --pretty=oneline --abbrev-commit
# 查看合并文件冲突的地方,手动解决完冲突后在提交
git add test.txt
git commit -m "test merge"
# 删除 other2 分支
git branch -d other2 # 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
# 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git merge --no-ff -m "merge with no-ff" dev
bug 分支 和 Feature 分支
#####bug 分支#####
# 当前工作正执行到一半,但是突然有新的 bug 需要修复,可以先使用 stash 将现场储藏起来,等到以后恢复现场继续工作
git stash
# 查看刚刚的工作现场
git stash list
# 第一种:恢复后,stash内容并不删除
git stash apply
# 需要使用命令来删除
git stash drop
# 第二种:恢复的同时把stash内容也删了
git stash pop
# 再次查看,就看不到什么内容了
git stash list
# 将某个提交 复制到当前分支,需要使用这次提交的 id。比如 把bug提交的修改“复制”到当前分支,避免重复劳动
git cherry-pick 4c805e2 #####Feature分支#####
# 开发一个新feature,最好新建一个分支。如果要丢弃一个没有被合并过的分支
git branch -D dev
多人协作
# 查看远程库的信息
git remote
# 显示更详细的信息
git remote -v
# 推送分支
# bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug
# feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
# master分支是主分支,因此要时刻与远程同步
git push origin master
# dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步
git push origin dev # clone时,只能看到本地的master分支
git remote add origin git@github.com:JackingQueen/FirestTest.git
# 如果push 失败,就先抓取分支
git pull
# 如果 pull 也失败,就设置dev和origin/dev的链接
git branch --set-upstream-to=origin/dev dev
# 最后在 pull ,然后 push # rebase操作可以把本地未push的分叉提交历史整理成直线
git rebase
git log --graph --pretty=oneline --abbrev-commit
5.标签管理
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动)。
# 创建标签
git tag v1.0
# 查看所有标签
git tag
# 根据 commid 打标签
git tag v0.9 f52c633
# 查看标签信息
git show v0.9
# 可以携带参数。用-a指定标签名,-m指定说明文字。
git tag -a v0.1 -m "version 0.1 released" 1094adb
# 删除本地标签
git tag -d v0.1
# 推送标签
git push origin v1.0
# 一次性推送全部尚未推送到远程的本地标签
git push origin --tags
# 删除远程标签,先删本地,再删远程
git tag -d v0.9
git push origin :refs/tags/v0.9
6. 自定义
- 修改颜色:
git config --global color.ui true
- 忽略特殊文件:在Git工作区的根目录下创建一个特殊的
.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。.gitignore
文件本身要放到版本库里,并且可以对.gitignore
做版本管理! - 配置别名:
git config --global alias.st status
最新文章
- Daily Scrum Meeting ——NinthDay
- C# 利用反射给不同类型对象同名属性赋值
- 01Mybatis_课程安排
- jquery多次上传同一张图片
- Readonly和disabled的区别 display:none和visible:hidden的区别
- HelloX操作系统与中国移动OneNET物联网平台成功完成对接
- 使用python求字符串或文件的MD5
- 涂抹Oracle—Flashback
- hdu3605(最大流+状态压缩)
- ubuntu 开机进入不了图形界面
- scala攻略--简介
- How To: Run Tapestry5 On JBoss 6/7
- 2018-2019-3 网络对抗技术 20165305 Exp3 免杀原理与实践
- View的相关原理(读书笔记)
- [leetcode]17. Letter Combinations of a Phone Number手机键盘的字母组合
- Hadoop书单词
- ScrollView嵌套ListView,禁止ListView的滚动,只让ScrollView可以滚动
- 小措施提高Linux服务器安全
- SSH-CLIENT : gSTM
- Codeforces D - High Load