网站首页 > 技术文章 正文
沉默是金,总会发光
你相信光吗
大家好,我是沉默
Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
安装
Windows – 推荐使用 git for windows,它包括了图形工具以及命令行模拟器
地址:https://git-for-windows.github.io/
配置
安装完Git ,首要任务是做一些简单的配置,最重要的是用户名及邮箱,打开终端,执行以下命令。
配置好这两项,Git 就能记录下来是谁做的动作,一切都更有组织性了。
$ git config --global user.name "My Name"
nbsp;git config --global user.email myEmail@example.com
创建仓库 git init
Git 会把所有文件以及历史记录直接记录成一个文件夹保存在你的项目中。创建一个新的仓库,首先要去到项目路径下,执行git init。这时 Git会创建一个隐藏的文件夹 .git,所有的历史和配置信息都储存在其中。
比如我们在桌面创建一个文件夹 test_repo, 打开终端,输入:
$ cd test_repo/
nbsp;git init
执行命令后出下面这行说明我们的仓库建立好了,但现在是空的,试着新建一个 hello.txt 文本文件到这个文件夹里。
检查状态 git status
git status 是一个非常重要的命令,它反馈给我们仓库当前状态的信息:是否为最新代码,有什么更新等等。在我们新建的仓库中执行 git status 会得到以下内容:
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing added to commit but untracked files present (use "git add" to track)
反馈信息告诉我们,hello.txt 尚未跟踪,这是说这个文件是新的,git不知道是应该跟踪它的变动还是直接忽略。为了跟踪我们的新文件,我们需要暂存它。
暂存 git add
Git 有个概念叫“暂存区“,你可以把它看成一块空白的画布,包裹着所有你可能会提交的变动。它一开始是空的,可以通过 git add 命令添加内容,最后使用 git commit 提交(创建一个快照)。
这个例子中只有一个文件,让我们先 add 它:
$ git add hello.txt
如果需要提交目录下的所有内容,可以这样做:
$ git add -A
再次使用 git status 查看状态试试:
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt
我们的文件已经准备好可以提交了。状态信息还告诉我们暂存区文件发生了什么变动,这里我们新增了一个文件,同样可以做修改和删除。取决于我们在上一次 git add 之后发生了什么。
提交 git commit
一次提交代表着我们的仓库到了一个新的状态,就像是一个快照,允许我们像使用时光机一样回到之前的某个时间点。
创建提交,需要我们至少在到暂存区有一次修改(刚才我们做了 git add),然后输入命令:
$ git commit -m "这是提交说明信息"
[master (root-commit) 38a7734] 这是提交说明信息
1 file changed, 1 insertion(+)
create mode 100644 hello.txt
这就创建了一次从暂存区的提交(加入 hello.txt),-m "这是提交说明信息"是用户对这次提交的描述,建议写成有意义的描述性信息。
远程仓库
1.链接远程仓库 git remote add
为了能够上传到远程仓库,我们需要先建起链接。这里我们的示例远程仓库地址为:https://github.com/test/hello-world.git,请自行尝试在 github,或者 gitlab 创建远程仓库。
把本地仓库链接到 github 上,执行以下命令:
$ git remote add origin https://github.com/test/hello-world.git
一个项目可以同时拥有多个远程仓库,为了区分通常会起不同的名字。通常主要的远程仓库被称为origin。
2.上传到远程仓库 git push
把本地的提交传送到服务器的动作叫做 push。每次我们要提交修改到服务器上时,都会使用到git push。
命令用法:git push 远程仓库名字 分支名字
$ git push origin master
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 249 bytes | 249.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/test/hello-world.git
* [new branch] master -> master
取决于你使用的服务器,push 过程中你可能需要验证身份(输入用户名、密码,请先在网站上进行注册)。如果没有出差错,现在用浏览器看你的远程仓库上已经有 hello.txt 了。
3.克隆仓库 git clone
我们可以用 git clone 命令把远程仓库下载到本地。比如下载上一步上传的项目:
$ git clone https://github.com/test/hello-world.git
Cloning into 'hello-world'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
4.获取远程仓库的更新 git pull
如果多人协作一个项目,其他人更新了远程仓库上的代码,那么我可以通过 git pull 来获取有更新的内容:命令用法 git pull <远程仓库名称> <分支名称>
分支管理
当你在做一个新功能的时候,最好是在一个独立的区域上开发(原始项目的拷贝),通常称之为分支。分支之间相互独立,并且拥有自己的历史记录,直到你决定把他们合并到一起。这样做的原因是:
已经可以运行的稳定版本的代码不会被破坏,不同的功能可以由不同开发者同时开发,开发者可以专注于自己的分支,不用担心被其他人破坏
在不确定哪个版本更好之前,同一个特性可以在不同的分支上创建多个版本,便于比较。
$ git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/test/hello-world
* branch master -> FETCH_HEAD
38a7734..d742def master -> origin/master
Updating 38a7734..d742def
Fast-forward
hello.txt | 2 ++
1 file changed, 2 insertions(+)
1.新建分支 git brach
每一个仓库的默认分支都叫master, 创建新分支可以用git branch <name>命令:
下面命令创建了一个名为 dev 的新分支,它和当前分支(master)内容是一样的。
$ git branch dev
2.切换分支 git checkout
使用 git brach 可以查看有那些分支:
$ git branch
dev
* master
* 号表示当前所在分支为master ,现在我们想在新分支dev 上开发新功能,
使用 git checkout 切换分支。用法: git checkout <分支名称>
$ git checkout dev
Switched to branch 'dev'
3.合并分支 git merge
看到更新。命令使用:git merge <来源分支>
示例合并步骤:比如 dev 并合到 master
A:切到需要被合并到的分支 master
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
B:执行合并命令
$ git merge dev
Updating d742def..4d00746
Fast-forward
hello.txt | 2 ++
1 file changed, 2 insertions(+)
C:删除分支
分支合并完后,如果不想保留,可以删除分支,使用命令:git brach -d <分支名>
撤销修改与回退版本
1.撤销修改
撤销修改是指将工作区中的修改撤销。
使用:git checkout <文件名或路径>
A:撤销工作区中当前目录的所有更改
$ git checkout .
Updated 1 path from the index
B:撤销工作区中指定文件的修改
$ git checkout -- hello.txt
注意:Git checkout 命令只能销工作区中的修改,而不能撤销暂存区中的修改(即add/commit的不适用)
2.版本回退
版本回退是指将版本库从当前版本回退到其他的版本
使用:git reset --<选项> <版本号>
在 Git 中,HEAD 指针指向的是当前版本,也就是最新的 commit id,上一个版本是 HEAD^,上上一个版本就是 HEAD^^,上50个版本可以写成 HEAD~50。
可以使用下面的命令,将 Git 回退到上一个版本:
$ git reset --hard HEAD^
交日志,获取提交 commit id
git reset --hard <commit id> 比如:
$ git reset --hard d742def
HEAD is now at d742def Update hello.txt
版本号(commit id) 一般会很长,可不用写全,一般写前七位够了,git自动匹配
Git reset 的常用选项(如上面示例中的--hard):
--mixed | reset HEAD and index。表示重置 HEAD 指针和 index 暂存区,但保持工作区不变。它是默认选项 |
--soft | reset only HEAD。表示仅仅重置 HEAD 指针,即只改变 HEAD 的指向,但保持工作区和暂存区不变 |
--hard | reset HEAD, index and working tree。表示重置 HEAD 指针、index 暂存区和工作区。这个才是完整的版本回退 |
解决冲突
冲突经常出现在合并分支或者是拉取别人的代码。有些时候git能自动处理冲突,其他时候需要我们手动处理。
可以调用外部GUI冲突解决工具:git mergetool
比如:整合Beyond Compare,配置如下
git config --global diff.tool bc4
git config --global difftool.prompt false
git config --global difftool.bc4.cmd '"E:\dev\Beyond Compare 4\BCompare.exe" "$LOCAL" "$REMOTE"'
git config --global merge.tool bc4
git config --global mergetool.prompt false
git config --global mergetool.bc4.cmd '"E:\dev\Beyond Compare 4\BCompare.exe" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"'
git config --global mergetool.bc4.trustexitcode true
gitignore 文件配置
大部分项目中,会有些文件、文件夹是我们不想提交的。为了防止使用git add -A 时不小心提交,我们可以利用 .gitignore 文件:
A:在项目根目录创建 .gitignore文件
B:在文件中列出不需要提交的文件名、文件夹名,每个一行
C:.gitignore文件需要像普通文件一样add、commit和push
示例:
*.log
build/
node_modules/
.idea/
my_notes.txt
“/”说明是一个文件夹,里面的所有内容都被递归忽略
欢迎朋友圈各种姿势的分享
如需转载,请后台联系授权
猜你喜欢
- 2024-10-07 如何编写gitignore文件(git怎么用)
- 2024-10-07 Git 工具 - 子模块(github 子模块)
- 2024-10-07 用git管理版本,你必须知道的事情
- 2024-10-07 详解Github的.gitignore忽略文件+.gitignore不生效解决+生产配置
- 2024-10-07 Git数据迁移:迁移代码到新仓库(git版本库迁移)
- 2024-10-07 收藏就行了:最全git总结(gitjournal)
- 2024-10-07 程序员必须掌握版本控制的工具 --- git(一)
- 2024-10-07 Github怎么上传超过100M的大文件?
- 2024-10-07 Git最全总结(git ci)
- 2024-10-07 Git使用的小技巧(git的使用超详细版教程)
- 1517℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 596℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 521℃MySQL service启动脚本浅析(r12笔记第59天)
- 489℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 489℃启用MySQL查询缓存(mysql8.0查询缓存)
- 477℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 456℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 454℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)