保定网站制作推广公司,视频生成链接,WordPress安装aplayer,安徽省水利厅网站 基本建设Git是一个开源的分布式版本控制系统#xff0c;常用于软件开发中对代码版本管理。Git具有版本控制、协作开发、分支管理、代码审查等功能#xff0c;能够记录每次代码修改的内容和时间#xff0c;并能够回滚到任意历史版本#xff0c;方便团队协作和代码维护。
Git的基本概…Git是一个开源的分布式版本控制系统常用于软件开发中对代码版本管理。Git具有版本控制、协作开发、分支管理、代码审查等功能能够记录每次代码修改的内容和时间并能够回滚到任意历史版本方便团队协作和代码维护。
Git的基本概念包括仓库(repository)、分支(branch)、提交(commit)和合并(merge)。
仓库(repository)
仓库是Git存储代码的基本单位可以理解为一个目录其中包含着项目的所有文件和历史提交记录。Git支持本地仓库和远程仓库本地仓库存储在开发者的计算机上而远程仓库通常存储在云端如GitHub、GitLab等。
分支(branch)
分支是Git非常重要的概念它允许开发者在不影响主干代码的情况下进行代码的修改和开发。每一个分支都是当前代码仓库中的一个拷贝可以独立进行修改和版本管理。通过分支可以实现多人协作开发同时也方便代码的维护和管理。
提交(commit)
提交是Git在代码仓库中保存修改后的版本。每一次提交都会记录该次修改的作者、时间和修改内容等信息。Git中的提交可以在本地进行也可以在远程仓库进行。
合并(merge)
合并是将两个分支或多个分支的修改集成到一起以合并后的版本作为基础版本可以保留各自修改的内容。在多人协作开发中合并是非常重要的操作可以避免代码冲突和重复开发的问题。
安装git
centos 自带git
[rootgit ~]# rpm -qa git
git-1.8.3.1-11.el7.x86_64
安装方法
[rootgit ~]# yum install git -y
编译安装可以安装新版本的git Git下载地址 Releases · git/git · GitHub # 安装依赖关系
[rootgit ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel autoconf gcc perl-ExtUtils-MakeMaker
# 编译安装
[rootgit ~]# tar -zxf git-2.0.0.tar.gz
[rootgit ~]# cd git-2.0.0
[rootgit ~]# ./configure --prefix/usr/local/git # 没有文件可以略过
[rootgit ~]# make
[rootgit ~]# make install
第一次运行git前的配置
git config --global user.name username #配置git使用用户
git config --global user.email emailmail.com #配置git使用邮箱
git config --global color.ui true #语法高亮
git config --list # 查看全局配置
过程
[rootgitlab ~]# git config --global user.name newrain #配置git使用用户
[rootgitlab ~]# git config --global user.email newrainaliyun.com #配置git使用邮箱
[rootgitlab ~]# git config --global color.ui true #语法高亮
[rootgitlab ~]# git config --list # 查看全局配置
user.namenewrain
user.mailnewrainaliyun.com
color.uitrue
生成的配置文件
[rootgitlab ~]# cd
[rootgitlab ~]# cat .gitconfig
[user]name newrainemail newrainaliyun.com
[color]ui true
获取git仓库
创建个远程裸库
创建目录
[rootyuancheng ~]# mkdir /git
[rootyuancheng ~]# cd /git
[rootyuancheng git]# ls创建裸库
[rootyuancheng git]# git init --bare ml.git
初始化空的 Git 版本库于 /git/ml.git/
[rootyuancheng git]# ls
ml.git授权
[rootyuancheng git]# chown -R git.git ml.git/克隆远程库生成本地的仓库
如果是另外一台虚拟机那么也得进行git配置
git config --global user.name username #配置git使用用户
git config --global user.email emailmail.com #配置git使用邮箱
git config --global color.ui true #语法高亮克隆
git clone git192.168.249.156:/git-root/shell.git 语法就是 git clone 你要克隆的IP路径 创建本地库上传至远程库
创建本地空库
[rootbendi ~]# git init cloud
初始化空的 Git 版本库于 /root/cloud/.git/
[rootbendi ~]# cd cloud/指定远程仓库
[rootbendi cloud]# git remote add origin 192.168.231.235:/git/ml.git拉取远程仓库的项目
[rootbendi cloud]# git pull 192.168.231.235:/git/ml.git
root192.168.231.235s password:
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 12 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (12/12), done.
来自 192.168.231.235:/git/ml* branch HEAD - FETCH_HEAD拉取成功
[rootbendi cloud]# ls
123.txt test1.txt test2.txt test3.txt
[rootbendi cloud]# ls -a
. .. 123.txt .git test1.txt test2.txt test3.txt进入仓库
[rootbendi cloud]# cd .git
[rootbendi .git]# ls
branches description HEAD index logs refs
config FETCH_HEAD hooks info objects在本地仓库写好数据上传至远程仓库
创建文件
[rootbendi cloud]# echo abc abc.txt上传到暂存区object只有一个内容
[rootbendi cloud]# git add abc.txt 上传至本地仓库object下生成内容会有数据的信息和大小
[rootbendi cloud]# git commit -m abc
[master 2530c4c] abc1 file changed, 1 insertion()create mode 100644 abc.txt上传至远程仓库
[rootbendi cloud]# git push origin master
root192.168.231.235s password:
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 246 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To 192.168.231.235:/git/ml.git3488352..2530c4c master - master文件的状态变化周期 查看仓库内的上传上来的数据
上传到远程仓库的代码都在 仓库下的object目录下
[rootlocalhost shell.git]# cd objects/
[rootlocalhost objects]# ls
19 30 c4 info pack查看结构
[rootlocalhost objects]# tree
.
├── 19
│ └── 0a18037c64c43e6b11489df4bf0b9eb6d2c9bf
├── 30
│ └── 934b5e119e7d374ae4bdc95f0a78529dce3378
├── c4
│ └── e7906139a764188f373d51cc188a7f578b07f5
├── info
└── pack5 directories, 3 files查看数据信息
[rootlocalhost objects]# git cat-file -p 190a1803
123[rootlocalhost objects]# git cat-file -p 30934
100644 blob 190a18037c64c43e6b11489df4bf0b9eb6d2c9bf 123.txt[rootlocalhost objects]# git cat-file -p c4e790
tree 30934b5e119e7d374ae4bdc95f0a78529dce3378
author newrain newrainaliyun.com 1700473533 0800
committer newrain newrainaliyun.com 1700473533 0800123git cat-file -p (tree显示的内容只需要加目录下和目录下的前几位字母即可) git cat-file -s 查看大小 git cat-file -t 查看类型 命令之git status
git status命令用于显示工作目录和暂存区的状态。它可以告诉你哪些文件被修改过哪些文件已经被暂存哪些文件还没有被跟踪等等。
git常见命令操作
命令命令说明#add添加文件内容至索引bisect通过二分查找定位引入 bug 的变更#branch列出、创建或删除分支#checkout检出一个分支或路径到工作区#clone克隆一个版本库到一个新目录#commit记录变更到版本库#diff显示提交之间、提交和工作区之间等的差异fetch从另外一个版本库下载对象和引用grep输出和模式匹配的行#init创建一个空的#log显示提交日志#merge合并两个或更多开发历史#mv移动或重命名一个文件、目录或符号链接#pull获取并合并另外的版本库或一个本地分支#push更新远程引用和相关的对象rebase本地提交转移至更新后的上游分支中#reset重置当前HEAD到指定状态#rm从工作区和索引中删除文件show显示各种类型的对象#status显示工作区状态#tag创建、列出、删除或校验一个GPG签名的 tag 对象 查看历史命令 git log #→查看提交历史记录 git log -2 #→查看最近几条记录 git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异 git log --stat -2 #→--stat简要显示数据增改行数这样能够看到提交中修改过的内容对文件添加或移动的行数并在最后列出所有增减行的概要信息 git log --prettyoneline #→--pretty根据不同的格式展示提交的历史信息 git log --prettyfuller -2 #→以更详细的模式输出提交的历史记录 git log --prettyfomat:%h %cn #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。 实践
[rootbendi cloud]# git log
commit 3450be09f9358c5852973443e2ac5b754773aa50
Author: ml ml11.com
Date: Mon Nov 20 14:08:48 2023 08003333commit 620d9c2f7cd5c3fb2e0dc84771549cec29faf752
Author: ml ml11.com
Date: Mon Nov 20 10:10:58 2023 0800zzzz commitcommit 63e83071fb506a671f2930038b7cfcfd24dacf9b
Author: ml ml11.com
Date: Mon Nov 20 09:30:28 2023 0800first commit现在有这些文件
[rootbendi cloud]# ls
test1.txt test2.txt test3.txt还原历史数据 Git服务程序中有一个叫做HEAD的版本指针当用户申请还原数据时其实就是将HEAD指针指向到某个特定的提交版本但是因为Git是分布式版本控制系统为了避免历史记录冲突故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本另外默认的HEAD版本指针会指向到最近的一次提交版本记录而上一个提交版本会叫HEAD^上上一个版本则会叫做HEAD^^当然一般会用HEAD~5来表示往上数第五个提交版本。 git reset --hard hash git reset --hard HEAD^ #→还原历史提交版本上一次 git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后就可以还原(值不写全,系统 会自动匹配) 测试
[rootbendi cloud]# git reset --hard 63e8307
HEAD 现在位于 63e8307 first commit查看数据
[rootbendi cloud]# ls
test1.txt还原未来数据 什么是未来数据就是你还原到历史数据了但是你后悔了想撤销更改但是git log已经找不到这个版本了。 git reflog #→查看未来历史更新点 测试命令
[rootbendi cloud]# git reflog
63e8307 HEAD{0}: reset: moving to 63e8307
3450be0 HEAD{1}: commit: 3333
620d9c2 HEAD{2}: initial pull开始还原
[rootbendi cloud]# git reset --hard 3450be0
HEAD 现在位于 3450be0 3333查看还原数据
[rootbendi cloud]# ls
test1.txt test2.txt test3.txt删除git内的文件
前提创建一个文件将其添加到暂存区
[rootbendi cloud]# git status
# 位于分支 master
无文件要提交干净的工作区
[rootbendi cloud]# echo 123 1.txt
[rootbendi cloud]# ls
1.txt test1.txt test2.txt
[rootbendi cloud]# git status
# 位于分支 master
# 未跟踪的文件:
# 使用 git add file... 以包含要提交的内容
#
# 1.txt
提交为空但是存在尚未跟踪的文件使用 git add 建立跟踪添加到暂存区
[rootbendi cloud]# git add 1.txt
[rootbendi cloud]# git status
# 位于分支 master
# 要提交的变更
# 使用 git reset HEAD file... 撤出暂存区
#
# 新文件 1.txt
#说明 没有添加到暂存区的数据直接rm删除即可。 已经添加到暂存区数据 git rm --cached database 将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件) git rm -f database 将文件数据从git暂存区和工作目录一起删除 由于前提文件已经添加到暂存区因此只是rm --cached只会删除暂存区源文件还在
[rootbendi cloud]# git rm --cached 1.txt
rm 1.txt
[rootbendi cloud]# ls
1.txt test1.txt test2.txt
[rootbendi cloud]# git status
# 位于分支 master
# 未跟踪的文件:
# 使用 git add file... 以包含要提交的内容
#
# 1.txt
提交为空但是存在尚未跟踪的文件使用 git add 建立跟踪要将源文件以及暂存区的文件全部删除
[rootbendi cloud]# git status
# 位于分支 master
# 要提交的变更
# 使用 git reset HEAD file... 撤出暂存区
#
# 新文件 1.txt
#
[rootbendi cloud]# git rm -f 1.txt
rm 1.txt
[rootbendi cloud]# ls
test1.txt test2.txt重命名暂存区数据
没有添加到暂存区的数据直接mv/rename改名即可。
已经添加到暂存区的数据
[rootbendi cloud]# ls
123.txt aaa.txt test1.txt[rootbendi cloud]# git mv 123.txt 456.txt
[rootbendi cloud]# ls
456.txt aaa.txt test1.txt
[rootbendi cloud]# git status
# 位于分支 master
# 要提交的变更
# 使用 git reset HEAD file... 撤出暂存区
#
# 新文件 456.txt
#对已经添加到暂存区的数据使用shell命令mv直接改名
[rootbendi cloud]# mv 2.txt 3.txt
[rootbendi cloud]# ls
3.txt
[rootbendi cloud]# git status
# 位于分支 master
# 尚未暂存以备提交的变更
# 使用 git add/rm file... 更新要提交的内容
# 使用 git checkout -- file... 丢弃工作区的改动
#
# 删除 2.txt
#
# 未跟踪的文件:
# 使用 git add file... 以包含要提交的内容
#
# 3.txt他会先删除源文件然后在创建3.txt 分支 在实际的项目开发中尽量保证master分支稳定仅用于发布新版本平时不要随便直接修改里面的数据文件。 那在哪干活呢干活都在dev分支上。每个人从dev分支创建自己个人分支开发完合并到dev分支最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。 查看当前在哪个分支
[rootbendi cloud]# git branch
* master创建分支
查看远程仓库在哪个分支
[rootyuancheng ml.git]# git branch
* master本地仓库
[rootbendi cloud]# git branch
* master创建分支
[rootbendi cloud]# git branch malong
[rootbendi cloud]# git branchmalong
* master上传分支
[rootbendi cloud]# git push origin malong
root192.168.231.235s password:
Total 0 (delta 0), reused 0 (delta 0)
To 192.168.231.235:/git/ml.git* [new branch] malong - malong查看远程仓库的分支
[rootyuancheng ml.git]# git branchmalong
* master
切换分支
[rootbendi cloud]# git branchmalong
* master准备切换分支
[rootbendi cloud]# git checkout malong
切换到分支 malong
[rootbendi cloud]# git branch
* malongmaster在malong分支进行修改master分支不会有数据
[rootbendi cloud]# git branch
* malongmaster
在马龙分支创建提交数据
[rootbendi cloud]# echo 123 123.txt
[rootbendi cloud]# git add 123.txt
[rootbendi cloud]# git commit -m 123
[malong 3488352] 1231 file changed, 1 insertion()create mode 100644 123.txt
[rootbendi cloud]# git push origin malong
root192.168.231.235s password:
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 303 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.231.235:/git/ml.git3450be0..3488352 malong - malong
[rootbendi cloud]# ls
123.txt test1.txt test2.txt test3.txt切换回master分支
[rootbendi cloud]# git checkout master
切换到分支 master
[rootbendi cloud]# ls
test1.txt test2.txt test3.txt
[rootbendi cloud]# git status
# 位于分支 master
无文件要提交干净的工作区合并代码
根据之前操作malong分支上有123.txt 而master分支没有进行合并
进行合并
[rootbendi cloud]# git merge master malong
更新 3450be0..3488352
Fast-forward123.txt | 1 1 file changed, 1 insertion()create mode 100644 123.txt[rootbendi cloud]# ls
123.txt test1.txt test2.txt test3.txt
[rootbendi cloud]# git branchmalong
* master删除分支
[rootbendi cloud]# git branchmalong
* master
[rootbendi cloud]# git branch -d malong
已删除分支 malong曾为 3488352。
[rootbendi cloud]# git branch
* master强制删除分支
git branch -D 加分支名
总之Git是一个非常强大、灵活和易于使用的版本控制系统对于软件开发中的代码管理和协作非常有用。学习Git需要掌握其基本概念和操作包括代码仓库的创建、分支的创建和合并、提交的管理等。同时需要注意Git的一些常见问题如代码冲突、版本回滚等。