Git本地仓库和远程仓库及分支操作

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Git本地仓库和远程仓库及分支操作

本地仓库操作

git status 查看文件状态

image.png
也可以使用git status –s 使输出信息更加简洁
image.png

git add 将未跟踪的文件加入暂存区

添加一个或多个文件到暂存区:

git add [file1][file2]...

添加指定目录到暂存区,包括子目录:

git add [dir]

添加当前目录下的所有文件到暂存区:

git add .

image.png
将新创建的文件加入暂存区后查看文件状态
image.png

git reset 将暂存区的文件取消暂存

image.png
将文件取消暂存后查看文件状态
image.png

git commit 将暂存区的文件修改提交到本地仓库

用命令git commit告诉 Git,把文件提交到仓库 ,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

  • 1 file changed:1个文件被改动(我们新添加的helloWorld.txt文件)
  • 0 insertions:没有新增内容变化。
  • 0 deletions:没有删除内容变化。

image.png

git rm 删除文件

image.png
删除文件后查看文件状态
image.png
上面删除的只是工作区的文件,需要提交到本地仓库
image.png
将文件添加至忽略列表

.gitignore 配置忽略提交

一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

我日常SpringBoot项目配置如下:

*.iml
.idea/
**/target/
*/src/main/webapp/
logs
*.class

git log 查看日志记录

git log命令显示从最近的提交日志, 如果嫌输出信息太多,可以试试加上--pretty=oneline参数。
image.png

git fetch 强制拉取

git fetch --all

git reset --hard origin/branch-name

git pull

git revert 本地回滚然后提交

指定回退某个提交

git revert -n <commitId>

你回退到了某个版本,然后后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
Git 提供了一个命令git reflog用来记录你的每一次命令,当你用git reset --hard HEAD^回退到wrote a readme file版本时,再想恢复到add distributed,就可以通过git reflog命令找到add distributed的commit id。
git 中关于撤销以及删除文件的不同场景

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以用命令git reset --hard commit_id,不过前提是没有推送到远程库

远程仓库操作

前面执行的命令操作都是针对的本地仓库,接下来我们学习关于远程仓库的一些操作,具体包括:

git remote 查看远程仓库

如果想查看已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出指定的每一个远程服务器的简写。 如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字

$ git remote
origin

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote -v
origin  https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin  https://gitee.com/helloMrZhan/gitCreateTest.git (push)

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote show origin
* remote origin
  Fetch URL: https://gitee.com/helloMrZhan/gitCreateTest.git
  Push  URL: https://gitee.com/helloMrZhan/gitCreateTest.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)

git remote add 添加远程仓库

运行 git remote add   添加一个新的远程 Git 仓库,同时指定一个可以引用的简写

$ git remote add origin2 https://gitee.com/helloMrZhan/gitCreateTest.git

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote -v
origin  https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin  https://gitee.com/helloMrZhan/gitCreateTest.git (push)
origin2 https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin2 https://gitee.com/helloMrZhan/gitCreateTest.git (push)

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)

git clone 从远程仓库克隆

如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。

克隆仓库的命令格式是 git clone [url]

$ git clone https://gitee.com/helloMrZhan/gitCreateTest.git
Cloning into 'gitCreateTest'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e

git remote rm 移除无效的远程仓库

如果因为一些原因想要移除一个远程仓库 ,可以使用 git remote rm

$ git remote add origin2 https://gitee.com/helloMrZhan/gitCreateTest.git

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote -v
origin  https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin  https://gitee.com/helloMrZhan/gitCreateTest.git (push)
origin2 https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin2 https://gitee.com/helloMrZhan/gitCreateTest.git (push)

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote rm origin2

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote -v
origin  https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin  https://gitee.com/helloMrZhan/gitCreateTest.git (push)

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)

注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库

git fetch 从远程仓库中抓取与拉取

git fetch 是从远程仓库获取最新版本到本地仓库,不会自动merge

$ git fetch origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://gitee.com/helloMrZhan/gitCreateTest
 * branch            master     -> FETCH_HEAD
   55acabe..509598c  master     -> origin/master

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)

git pull 是从远程仓库获取最新版本并merge到本地仓库

修改远程仓库的文件,然后git pull

$ git pull origin master
From https://gitee.com/helloMrZhan/gitCreateTest
 * branch            master     -> FETCH_HEAD
Updating 55acabe..509598c
Fast-forward
 README.md | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)

注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数--allow-unrelated-histories

git push 推送到远程仓库

当你想分享你的代码时,可以将其推送到远程仓库。 命令形式:git push [remote-name] [branch-name]

$ git add .

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git commit -m "add hello.txt" hello.txt
[master 0b2584f] add hello.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git push origin master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 255 bytes | 127.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.0]
To https://gitee.com/helloMrZhan/gitCreateTest.git
   509598c..0b2584f  master -> master

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)

Git分支

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git 的master分支并不是一个特殊分支。 它跟其它分支没有区别。 之所以几乎每一个仓库都有 master 分支,是因为git init 命令默认创建它,并且大多数人都懒得去改动它。

git branch 查看分支

# 列出所有本地分支

$ git branch

# 列出所有远程分支

$ git branch -r

# 列出所有本地分支和远程分支

$ git branch -a
$ git branch
* master

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git branch -r
  origin/master

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git branch -a
* master
  remotes/origin/master

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)

git branch [branch name] 创建分支

$ git branch dev

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git branch
  dev
* master

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)

git checkout 切换分支

  • 下载远程分支为本地分支: git checkout -b <localName> <branch-name>

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

git branch dev
git checkout dev
$ git checkout dev
Switched to branch 'dev'

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (dev)
$ git branch
* dev
  master

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (dev)

git push 推送至远程仓库分支

$ git push origin dev
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.0]
remote: Create a pull request for 'dev' on Gitee by visiting:
remote:     https://gitee.com/helloMrZhan/gitCreateTest/pull/new/helloMrZhan:dev...helloMrZhan:master
To https://gitee.com/helloMrZhan/gitCreateTest.git
 * [new branch]      dev -> dev

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (dev)

image.png

git merge 合并分支

git merge命令用于合并指定分支到当前分支。
图片37.png
注意到上面的Fast-forward信息,Git 告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
当然,也不是每次合并都能Fast-forward。Fast forward模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git 就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。这时候我们需要使用--no-ff方式的git merge:
首先,仍然创建并切换dev分支:

git switch -c dev 

修改readme.txt文件,并提交一个新的commit:

git add readme.txt  
git commit -m "add merge" 

我们切换回master:

git switch master

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:

git merge --no-ff -m "merge with no-ff" dev 

因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史:

$ git log --graph --pretty=oneline --abbrev-commit
*   fc76cf7 (HEAD -> master) merge with no-ff
|\  
| * f52c633 (dev) add merge
|/  
*   cf810e4 conflict fixed

可以看到,不使用Fast forward模式,merge后就像这样:

有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决
图片38.png

git branch -d [branch name] 删除分支

$ git branch -d dev
Deleted branch dev (was b6e4da9).

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git branch
* master

如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D

注:如果要删除远程仓库中的分支,可以使用命令git push origin –d branchName

$ git push origin -d dev
remote: Powered by GITEE.COM [GNK-6.0]
To https://gitee.com/helloMrZhan/gitCreateTest.git
 - [deleted]         dev

Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
21天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
41 2
|
2月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
120 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
2月前
|
Shell 开发工具 git
git学习三:git使用:删除仓库,删除仓库内文件
通过GitHub的设置页面删除仓库,以及如何使用Git命令行删除仓库中的文件或文件夹。
165 1
git学习三:git使用:删除仓库,删除仓库内文件
|
2月前
|
开发工具 git 开发者
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
421 3
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
|
2月前
|
开发工具 git 索引
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
80 4
|
2月前
|
开发工具 git
Git分支使用总结
Git分支使用总结
40 1
|
2月前
|
存储 开发工具 git
Git 远程仓库地址管理:添加、修改和验证
Git 远程仓库地址管理:添加、修改和验证
76 4
|
2月前
|
编译器 开发工具 数据安全/隐私保护
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
本文提供了一个关于如何在Gitee上进行多人协作和版本控制的详细教程,包括新建和初始化仓库、克隆仓库、邀请好友共同管理仓库以及注意事项,旨在帮助用户顺利进行代码协作开发。
262 0
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
|
3月前
|
开发工具 git
IDEA更改远程git仓库地址
【9月更文挑战第27天】本文介绍了两种在IntelliJ IDEA中更改远程Git仓库地址的方法:一是通过图形界面,在VCS设置中直接修改;二是通过IDEA内置的命令行工具使用`git`命令进行更改。具体步骤包括从版本控制菜单进入项目设置、修改远程仓库URL,以及使用`git remote set-url`命令更新仓库地址,并验证修改结果。这些方法适用于项目迁移或更换仓库地址的情况。
620 6
|
2月前
|
网络协议 网络安全 开发工具
【Git快速入门】Git代码管理手册与协同开发之远程仓库(四)
【Git快速入门】Git代码管理手册与协同开发之远程仓库(四)