Git
Git
概述
Git 是一个开源的分布式版本控制系统,主要用于追踪文件的变更。它最初由 Linus Torvalds 设计用于管理 Linux 内核的开发,现在已经被广泛应用于各种软件开发项目。Git 允许开发者记录文件每次的更新变动,从而可以管理并协调项目开发过程中的代码变更。
Git 的特点包括:
- 分布式:Git 是分布式的,意味着每个开发者的本地仓库都包含了整个项目的所有历史记录。这使得开发者无需联网就能进行版本控制操作,同时也降低了单点故障的风险。
- 强大的分支和合并:Git 提供了非常强大且灵活的分支和合并功能。开发者可以创建多个分支来并行开发不同功能或修复不同的问题,然后再将这些分支合并回主分支。
- 高效的数据处理:Git 采用了独特的数据存储和压缩机制,使得处理大型项目或大量文件时仍然能保持高效性能。
- 易于学习和使用:尽管 Git 功能强大,但它的命令行界面设计直观且易于学习。同时,也有许多图形化界面工具可供使用,使得 Git 更加易于上手。
安装
如果是 Windows 环境,在官方网站下载最新版的安装程序,双击运行安装程序,可以保持默认选项,完成安装。
如果是 Linux 环境,可以直接使用 YUM 进行安装。
# yum -y install git
在 Windows 环境,安装完成后,右键选择 Git Bash Here
,打开 Git 终端,输入 git -v
查看版本:
$ git -v
git version 2.40.1.windows.1
设置用户名和邮箱:
$ git config --global user.name "stone"
$ git config --global user.email "287779438@qq.com"
查看:
$ git config --list
user.name=stone
user.email=287779438@qq.com
仓库
Git 仓库(repository)是记录文件变更的地方,存储版本控制数据,对应 .git
目录。
创建目录,进入目录,然后使用 git init
命令将本地目录转换为 Git 仓库:
$ mkdir git-study
$ cd git-study/
$ git init
Initialized empty Git repository in D:/code/mycode/git-study/.git/
执行 git init
后,就会在该目录下创建一个名为 .git
的隐藏目录,用于跟踪并记录在该目录中发生的所有更新。
区域
Git 的区域主要包括工作区、暂存区和本地仓库。
- 工作区(Work Directory):这是在本地电脑上编辑代码的地方,一般就是项目的根目录,包含了项目的所有文件。在工作目录中添加、删除、修改文件,这些操作都会影响 Git 的状态。
- 暂存区(Stage/Index):这是一个临时的存储区域(
.git/index
文件),它记录了想要提交到本地仓库的文件的快照。可以使用git add
命令将工作目录中的文件添加到暂存区,可以使用git restore
命令将暂存区中的文件恢复到工作目录,可以使用git rm --cached
从暂存区移除文件。 - 本地仓库(Repository):这是一个隐藏的文件夹(
.git/objects
),它保存了项目的所有版本历史。可以使用git commit
命令将暂存区中的文件提交到本地仓库,也可以使用git checkout
命令从本地仓库中切换到不同的分支或版本。
使用 VS Code 打开工作区,创建目录及代码文件后,使用 git add
添加文件到暂存区:
$ git add page/login/index.html
也可以使用 git add .
将目录及子目录下的所有修改的文件添加到暂存区:
$ git add .
添加后,使用 git ls-files
查看暂存区的文件:
$ git ls-files
page/login/index.html
然后就可以使用 git commit
将暂存区中的文件提交到本地仓库,生成一次版本记录:
$ git commit -m "1.登录页面-标签部分准备"
[master (root-commit) 12dd8f2] 1.登录页面-标签部分准备
1 file changed, 11 insertions(+)
create mode 100644 page/login/index.html
状态
被 Git 管理的文件有 2 种状态:
- 未跟踪(Untracked):新创建的文件在 Git 仓库中是未跟踪的。Git 不会自动跟踪仓库之外的文件。使用
git status
命令,可以看到未跟踪的文件列表。 - 已跟踪 (Tracked):一旦文件被
git add
命令添加到暂存区,或者文件已经被提交到仓库中,那么这个文件就被 Git 跟踪了。已跟踪的文件可能有三种子状态:已修改(modified)、已暂存(staged)和已提交(committed)。- 已修改(Modified):已跟踪的文件内容被改变,但还没有被
git add
命令暂存或提交。git status
会显示这些文件为已修改。 - 已暂存(Staged):已修改的文件被
git add
命令暂存,准备提交。存的文件会出现在下一次提交中。 - 已提交(Committed):文件已经被
git commit
命令提交到 Git 仓库中,并有一个与之关联的提交记录。如果文件在提交之后被修改,它将回到已修改的状态。
- 已修改(Modified):已跟踪的文件内容被改变,但还没有被
为项目添加一个文件 index.css
,查看状态:
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
page/login/index.css
nothing added to commit but untracked files present (use "git add" to track)
使用 git add
将文件添加到暂存区后,查看状态:
$ git add .
$ git status -s
A page/login/index.css
其中 A
表示新添加到暂存区的文件,表示该文件已被 Git 跟踪。
修改该文件后,查看状态:
$ git status -s
AM page/login/index.css
其中 M
表示该文件在工作区中有改动,状态为已修改,使用 git add
将文件再次添加到暂存区后,查看状态:
$ git add .
$ git status -s
A page/login/index.css
然后使用 git commit
将暂存区中的文件提交到本地仓库,生成一次版本记录:
$ git commit -m '2.登录页面-css样式'
[master 2448a60] 2.登录页面-css样式
1 file changed, 6 insertions(+)
create mode 100644 page/login/index.css
再次查看状态:
$ git status -s
可以看到当前已经没有变更的文件了。
暂存区
前面提到可以使用 git restore
命令将暂存区中的文件恢复到工作目录以及可以使用 git rm --cached
从暂存区移除文件,具体如下图:
查看暂存区文件:
$ git ls-files
page/login/index.css
page/login/index.html
修改了 index.css
之后,查看状态:
$ git status -s
M page/login/index.css
想放弃之前的修改,回到之前暂存的状态:
$ git restore page/login/index.css
再次查看暂存区文件和状态:
$ git ls-files
page/login/index.css
page/login/index.html
$ git status -s
可以看到当前已经没有变更的文件了。
从暂存区移除该文件:
$ git rm --cached page/login/index.css
rm 'page/login/index.css'
$ git ls-files
page/login/index.html
$ git status -s
D page/login/index.css
?? page/login/index.css
此时该文件变为未跟踪状态,然后再添加到暂存区:
$ git add .
$ git ls-files
page/login/index.css
page/login/index.html
练习一
为项目添加 index.js
文件:
$ git add .
$ git commit -m '3.登录页面-开发完毕'
[master 654a95e] 3.登录页面-开发完毕
1 file changed, 1 insertion(+)
create mode 100644 page/login/index.js
查看提交记录:
$ git log --oneline
654a95e (HEAD -> master) 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
回退版本
将本地仓库某个版本对应的内容快照,恢复到工作区/暂存区。即重置当前 HEAD 到指定状态。
语法:
git reset [--soft | --mixed | --hard | --merge | --keep] [<commit>]
其中:
--soft
:只重置 HEAD 到指定提交,暂存区和工作区不变。这意味着所有更改仍然保持为已暂存状态,可以重新提交它们。--mixed
(或不带任何选项):这是git reset
的默认行为。它重置 HEAD 和暂存区到指定提交,但保留工作区中的文件更改。这些更改会变为未暂存状态。--hard
:重置 HEAD、暂存区和工作区到指定提交。所有更改都会被丢弃,工作区将完全匹配指定提交的状态。
先查看提交记录:
$ git log --oneline
654a95e (HEAD -> master) 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
使用 --soft
选项回退到第一次提交:
$ git reset --soft 12dd8f2
工作区中保留了第一提交之后增加的文件:
$ git status -s
A page/login/index.css
A page/login/index.js
暂存区中保留了第一次提交之后增加的文件:
$ git ls-files
page/login/index.css
page/login/index.html
page/login/index.js
使用 --mixed
选项回退到第一次提交:
$ git reset --mixed 12dd8f2
工作区中保留了第一提交之后增加的文件:
$ git status -s
?? page/login/index.css
?? page/login/index.js
暂存区中没有保留了第一次提交之后增加的文件:
$ git ls-files
page/login/index.html
将工作区中未跟踪状态的文件添加到暂存区:
$ git add .
$ git ls-files
page/login/index.css
page/login/index.html
page/login/index.js
使用 --hard
选项回退到第一次提交:
$ git reset --hard 12dd8f2
HEAD is now at 12dd8f2 1.登录页面-标签部分准备
工作区中没有保留了第一提交之后增加的文件:
$ git status -s
暂存区中没有保留了第一次提交之后增加的文件:
$ git ls-files
page/login/index.html
查看提交记录:
$ git log --oneline
12dd8f2 (HEAD -> master) 1.登录页面-标签部分准备
查看完整提交记录:
$ git reflog --oneline
12dd8f2 (HEAD -> master) HEAD@{0}: reset: moving to 12dd8f2
12dd8f2 (HEAD -> master) HEAD@{1}: reset: moving to 12dd8f2
12dd8f2 (HEAD -> master) HEAD@{2}: reset: moving to 12dd8f2
654a95e HEAD@{3}: commit: 3.登录页面-开发完毕
2448a60 HEAD@{4}: commit: 2.登录页面-css样式
12dd8f2 (HEAD -> master) HEAD@{5}: commit (initial): 1.登录页面-标签部分准备
使用 --hard
选项回退到最近提交,恢复到本节测试之前:
$ git reset --hard 654a95e
HEAD is now at 654a95e 3.登录页面-开发完毕
查看提交记录:
$ git log --oneline
654a95e (HEAD -> master) 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
忽略文件
通过创建和编辑 .gitignore
文件,可以让 Git 忽略某些文件或目录,以避免它们被提交到版本控制仓库中。
常见的应该被 .gitignore
忽略的文件类型:
- 依赖目录:例如
node_modules
或其他包含第三方库和依赖的目录。这些目录通常可以通过npm install
、yarn install
或其他包管理器重新生成。 - 构建目录:例如
dist
,这包含编译后结果。 - 日志文件、缓存文件或临时文件:这些文件通常是在开发或运行过程中自动生成的,不需要被共享或版本控制。
- 敏感文件:如包含密码、API 密钥或其他敏感数据的文件。
请注意,.gitignore
文件只能忽略那些尚未被 Git 跟踪的文件。如果某个文件已经被 Git 跟踪(即已经提交到仓库),那么即使在 .gitignore
文件中添加了该文件的模式,Git 也不会停止跟踪它。要停止跟踪一个文件,需要从 Git 的暂存区中删除它,这通常通过 git rm --cached <file>
命令来完成。
使用 .gitignore
文件的步骤:
创建
.gitignore
文件。在项目的根目录下(通常是与.git
目录相同的目录)创建一个名为.gitignore
的文件。添加要忽略的文件或目录。
node_modules
dist
.vscode
*.pem
*.cer
*.log
- 保存并提交
.gitignore
文件。
$ git add .
$ git commit -m '4.忽略文件增加'
[master 2ffd147] 4.忽略文件增加
1 file changed, 6 insertions(+)
create mode 100644 .gitignore
$ git log --oneline
2ffd147 (HEAD -> master) 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
分支
在 Git 中,分支是一个非常重要的概念,它允许开发者从主线上分离出来进行另外的操作,而又不影响主线,主线可以继续进行其他的工作。分支的创建是为了解决临时需求或进行特定的开发任务,保证主线代码随时可用,多人协同开发提高效率。一旦分支上的工作完成,可以将其合并回主线,并删除该分支。
分支本质上是指向节点的可变指针,默认名称为 master
。改变分支实际上就是改变 HEAD 指针的指向,影响工作区/暂存区的代码。
创建
创建内容列表 content
分支,并产生 3 次提交记录:
- 使用
git branch
创建content
分支:
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git branch content
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
- 使用
git checkout
切换到content
分支:
$ git checkout content
Switched to branch 'content'
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git branch
* content
master
- 工作区准备代码并暂存提交,重复 3 次:
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git add .
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git commit -m '5.内容页面-标签搭建'
[content a49428e] 5.内容页面-标签搭建
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 content/index.html
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git add .
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git commit -m '6.内容页面-样式编写'
[content 360119a] 6.内容页面-样式编写
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 content/index.css
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git add .
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git commit -m '7.内容页面-功能编写'
[content 655ac20] 7.内容页面-功能编写
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 content/index.js
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git log --oneline
655ac20 (HEAD -> content) 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 (master) 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git checkout master
Switched to branch 'master'
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git checkout content
Switched to branch 'content'
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
创建登录 Bug 修复 login-bug
分支,并产生 2 次提交记录:
- 使用
git checkout
切回到master
主分支
$ git checkout master
Switched to branch 'master'
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
- 使用
git branch
创建login-bug
分支:
$ git branch login-bug
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
- 使用
git checkout
切换到login-bug
分支:
$ git checkout login-bug
Switched to branch 'login-bug'
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git branch
content
* login-bug
master
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
- 工作区修改代码并暂存提交,重复 2 次:
$ git add .
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git commit -m '8.登录Bug-手机号长度判断'
[login-bug 5723069] 8.登录Bug-手机号长度判断
1 file changed, 2 insertions(+), 1 deletion(-)
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git add .
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git commit -m '9.登录Bug-验证码长度判断'
[login-bug 5adfa21] 9.登录Bug-验证码长度判断
1 file changed, 2 insertions(+), 1 deletion(-)
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git log --oneline
5adfa21 (HEAD -> login-bug) 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
2ffd147 (master) 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
合并
将 login-bug
分支合并回到 master
分支并删除 login-bug
分支。
- 使用
git checkout
切回到要合入的master
主分支:
$ git checkout master
Switched to branch 'master'
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
- 使用
git merge
合并login-bug
分支
$ git merge login-bug
Updating 2ffd147..5adfa21
Fast-forward
page/login/index.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
5adfa21 (HEAD -> master, login-bug) 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
- 使用
git branch -d
删除login-bug
分支:
$ git branch -d login-bug
Deleted branch login-bug (was 5adfa21).
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git branch
content
* master
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
将 content
分支合并回到 master
分支并删除 content
分支。
- 使用
git merge
合并content
分支,由于此时content
分支的父级节点C4
小于master
主分支节点C9
,会自动使用多个快照记录合并后产生一次新的提交:
$ git branch
content
* master
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git merge content
Merge made by the 'ort' strategy.
content/index.css | 0
content/index.html | 0
content/index.js | 0
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 content/index.css
create mode 100644 content/index.html
create mode 100644 content/index.js
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
8b1ce21 (HEAD -> master) Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 (content) 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
- 使用
git branch -d
删除content
分支:
$ git branch -d content
Deleted branch content (was 655ac20).
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
8b1ce21 (HEAD -> master) Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git branch
* master
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
注意:
提交记录的顺序按照产生的先后顺序排列,而非合并的先后顺序。
冲突
Git 合并冲突通常发生在尝试合并两个或更多并行开发的分支时。当两个分支对同一个文件的同一部分进行了不同的更改,Git 无法自动决定应该保留哪些更改,因此会产生冲突。
解决方法:
- 找到冲突文件并手动解决。
- 解决后需要提交一次记录。
- 创建
publish
分支并切换到publish
分支
$ git branch publish
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git checkout publish
Switched to branch 'publish'
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (publish)
- 在
publish
分支下修改index.html
文件的title
标签内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Publish-分支下改动</title>
</head>
<body>
<div></div>
</body>
</html>
- 在
publish
分支下提交修改
$ git add .
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (publish)
$ git commit -m '11.开发了发布文章页面'
[publish 9009669] 11.开发了发布文章页面
1 file changed, 1 insertion(+), 1 deletion(-)
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (publish)
- 切换到
master
分支
$ git checkout master
Switched to branch 'master'
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
- 在
master
分支下修改index.html
文件的title
标签内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Master-分支下修改</title>
</head>
<body>
<div></div>
</body>
</html>
- 在
master
分支下提交修改
$ git add .
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git commit -m '12.修改了内容标题页面'
[master ea07ed3] 12.修改了内容标题页面
1 file changed, 1 insertion(+), 1 deletion(-)
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
- 在
master
分支下合并publish
分支
$ git merge publish
Auto-merging page/login/index.html
CONFLICT (content): Merge conflict in page/login/index.html
Automatic merge failed; fix conflicts and then commit the result.
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master|MERGING)
提示出现合并冲突,等待解决,并在冲突页面出现如下提示:
其中:
- 采用当前更改:表示保留当前分支的代码,而放弃合并分支中的修改。
- 采用传入更改:表示保留合并分支的代码,而放弃当前分支中的修改。
- 保留双方更改:表示保留当前分支和合并分支中的所有修改。这会导致代码中存在重复或冲突的部分,需要进一步的手动编辑来解决实际的冲突。
- 比较变更:表示打开一个比较视图,展示当前分支和合并分支在冲突区域的具体差异。
- 点击
采用当前更改
,再次提交
$ git add .
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master|MERGING)
$ git commit -m '13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改'
[master 7728759] 13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
7728759 (HEAD -> master) 13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改
ea07ed3 12.修改了内容标题页面
9009669 (publish) 11.开发了发布文章页面
8b1ce21 Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git branch -d publish
Deleted branch publish (was 9009669).
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
7728759 (HEAD -> master) 13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改
ea07ed3 12.修改了内容标题页面
9009669 11.开发了发布文章页面
8b1ce21 Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
远程仓库
Git 远程仓库是指在 Git 托管平台上的项目仓库,既可以是内网的 Git 托管平台(例如 GitLab),也可以是公网的 Git 托管平台(例如 Gitee,GitHub)。
开发者 A 将项目从本地仓库推送到远程仓库的步骤:
- 在 Gitee 上注册用户并登录。
- 创建远程仓库,这里在 Gitee 上创建一个名称为
git-study
的远程仓库。
- 将本地仓库与远程仓库关联,使用
git remote add
命令将本地仓库与远程仓库关联起来。例如,可以运行git remote add origin <远程仓库的URL>
来将远程仓库命名为 “origin”。这里的<远程仓库的URL>
是在托管平台上创建的远程仓库的URL。
$ git remote add origin https://gitee.com/stonebox/git-study.git
$ git remote -v
origin https://gitee.com/stonebox/git-study.git (fetch)
origin https://gitee.com/stonebox/git-study.git (push)
- 推送本地仓库到远程仓库,使用
git push
命令将本地仓库推送到远程仓库。由于这是第一次推送,需要使用-u
或--set-upstream
选项来设置上游分支。例如,可以运行git push -u origin master
来推送master
分支到远程仓库的master
分支。这里的origin
是在上一步中设置的远程仓库的名称,master
是分支的名称。如果默认分支不是master
,需要将其替换为实际使用的分支名称。
$ git push -u origin "master"
Enumerating objects: 51, done.
Counting objects: 100% (51/51), done.
Delta compression using up to 8 threads
Compressing objects: 100% (34/34), done.
Writing objects: 100% (51/51), 4.50 KiB | 2.25 MiB/s, done.
Total 51 (delta 9), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/stonebox/git-study.git
* [new branch] master -> master
branch 'master' set up to track 'origin/master'.
开发者 B 将项目从远程仓库克隆到本地的步骤:
- 切换到指定目录。
- 执行
git clone
命令克隆远程仓库到当前目录:
$ git clone https://gitee.com/stonebox/git-study.git
Cloning into 'git-study'...
remote: Enumerating objects: 51, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 51 (delta 9), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (51/51), 4.50 KiB | 4.50 MiB/s, done.
Resolving deltas: 100% (9/9), done.
- 克隆完成后可以查看提交记录:
$ cd git-study
$ git log --oneline
7728759 (HEAD -> master, origin/master, origin/HEAD) 13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改
ea07ed3 12.修改了内容标题页面
9009669 11.开发了发布文章页面
8b1ce21 Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备
协同开发
开发者 A 将代码推送到远程仓库,开发者 B 从远程仓库克隆代码到本地后,就可以进行协调开发了。
开发者 A 修改了代码后,提交并推送到远程仓库:
$ git add .
$ git commit -m '开发者A-修改首页标题'
[master dacce34] 开发者A-修改首页标题
1 file changed, 1 insertion(+), 1 deletion(-)
$ git push origin master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 464 bytes | 464.00 KiB/s, done.
Total 5 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/stonebox/git-study.git
7728759..dacce34 master -> master
开发者 B 拉取最新代码:
$ git pull origin master
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), 444 bytes | 2.00 KiB/s, done.
From https://gitee.com/stonebox/git-study
* branch master -> FETCH_HEAD
7728759..dacce34 master -> origin/master
Updating 7728759..dacce34
Fast-forward
page/login/index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
然后开发者 B 就可以基于最新的代码进行开发了。