git
分布式版本控制系统
版本控制系统分类:
-
本地版本控制
对文件的每次更新做记录,可以对每个版本做一个快照(适合个人使用)
-
集中版本控制
所有版本的数据都存储在服务器上,协同开发者同步更新/上传自己的修改。代表的有:SVN等
-
分布式版本控制
代表有:git
所有的版本信息仓库全部同步到本地的每个用户。
Git和SVN区别:
SVN是集中式版本控制系统。版本库集中放在中央服务器上,工作时,用自己的电脑从中央服务器得到最新版本,然后工作,工作完成之后,把自己做的推送到中央服务器上。必须联网才可以工作
Git是分布式的版本控制系统。没有中央服务器,每个人的电脑就是一个完整的版本库。
李纳斯 托沃滋(Linus Benedic Torvalds):Linux和Git之父。
配置
# 配置用户名
git config --global user.name "zhangsan"
# 配置email
git config --global user.email "1341351234@qq.com"
# 显示当前git的配置信息
git config --list
WorkSpace:工作区,平时工作存放代码项目的地方。
Index/Stage:暂存区,存放临时改动。
Respository:仓库区(或本地仓库),这里有提交的所有版本的数据。
Remote:远程仓库,托管代码的服务器。比如:GitHub 、Gitee。有时候公司会自己搭建自己的git服务器(可以使用gitlab搭建)
git项目的创建及克隆
1、创建仓库
# 在当前目录新建一个Git仓库
git init
# 执行之后多出一个.git目录,版本信息在这个目录中。
2、克隆远程仓库
git clone URL
git文件操作
1、文件的四种状态:
- Untracked:未跟踪。没有加入到git库,不参与版本控制
- Unmodify:文件已入库,未修改
- Modify:文件已修改
- Staged:暂存状态
2、添加所有文件到暂存区
# 添加所有文件到暂存区
git add .
3、提交暂存区的内容到本地仓库
# 提交暂存区的内容到本地仓库 -m “提交的信息”
git commit -m
4、查看文件状态
# 查看指定文件状态
git status [filename]
# 查看所有文件状态
git status
5、忽略上传文件
.gitignore文件中添加信息,表示需要忽视上传的文件。
# 为注释
*.txt # 忽略所有.txt文件
!lib.txt # lib.txt除外
# 在前在后的区别,在前代表往上忽略,在后代表往后忽略
/temp # 仅仅忽略根目录下的到temp文件夹,不包括其他目录
build/ # 忽略build/目录下的所有文件
doc/*.txt # 忽略doc/notes.txt,但不忽略doc/server/arch.txt
git一般操作
1、 创建本地git仓库
在某个文件夹中执行命令,将这个文件夹作为本地git仓库
(base) MacBook-Pro gitdemo % git init
提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示:配置使用初始分支名,并消除这条警告,请执行:
提示:
提示: git config --global init.defaultBranch <名称>
提示:
提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示:可以通过以下命令重命名刚创建的分支:
提示:
提示: git branch -m <name>
已初始化空的 Git 仓库于 /Users/gitdemo/.git/
2、 添加所有文件到暂存区
git add .
commit之前比较比较文件的不同(比较暂存区和工作区的不同)
git diff filename
3.、将暂存区文件提交到本地仓库
git commit -m '提交信息'
4、(第一次需要)在本地仓库上将本地仓库和远程库关联
# 本地库关联一个叫做origin的(指向gitee)远程库
git remote add origin https://gitee.com/xixihahahahaha/git
# 查看所有远程库信息
git remote -v
# 查看某个远程库信息
git remote show [remote]
# 删除远程仓库
git remote rm name
# 修改仓库名
git remote rename old_name new_name
# 一个本地库可以同步到多个远程库
5、将本地分支的版本上传到远程仓库并合并
# 命令格式
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master:master
# 本地分支和远程分支名相同,可以省略冒号
git push <远程主机名> <本地分支名>
# 例子
将本地分支develop push到远程仓库origin wrw_fp16_2D_RS1x7_pad0x3的分支
git分支管理
# 列出分支(列出本地分支)
git branch
# 列出所有分支(包括本地/远程分支)
git branch -a
# 列出远程分支的名字
git branch -r
# 创建分支
git branch (branchname)
# 切换分支
git checkout (branchname)
# 创建新分支的同时切换到该分支
git checkout -b (branchname)
git switch (branchname)
# 删除远程仓库的分支
# 表示删除origin主机的master分支
git push origin --delete master
# 删除本地的分支
git branch -d newbranch
git clone项目不全问题:
使用一下命令clone项目时会出现项目中的子模块(submodule)不能完整clone
git clone github/gitee链接
解决方案:
第一步:
首先执行git clone命令,但是不要加–recursive将项目主体clone下来。不用管报错,执行完成就OK
git clone github/gitee项目链接
第二步:
cd到git clone的主目录下(因为有.git文件),然后执行:
git submodule update --init --recursive
查看被人的合并(merge)信息
1 查看合并提交
(1)正在进行合并(merge)操作的情况下
git log –merge
(2)没有正在进行合并操作的情况下
git log –merges
2 查看特定合并提交的详细信息
git show <merge_commit_hash>
解决地址合并冲突
当不同人对相同文件的相同行进行不同的更改时,会发生合并冲突。只有解决所有冲突,才能合并github上的拉取(pull)请求
(1)git clone URL
git clone下来得本地内容:
被别人修改后得远程仓库内容