一篇详解Git版本控制工具
华子目录
- 版本控制
- `集中化`版本控制
- `分布式`版本控制
- `Git`简史
- `Git`工作机制
- `Git`和代码托管中心
- 局域网
- 互联网
- `Git`安装
- 基础配置
- git的--local,--global,--system的区别
- 创建仓库
- 方式1`git init`
- 方式2`git clone git网址`
- 工作区,暂存区,本地仓库
- 查看工作区文件`ls`
- 查看暂存区文件`git ls-files`
- 文件状态
- 查看仓库的状态`git status`
- 添加到暂存区`git add`
- 提交到本地仓库`git commit`
- 当修改文件内容时
- 查看仓库提交历史`git log`
- 版本穿梭`git reset`
- 查看`工作区`与`暂存区`区别
- 查看`工作区+暂存区`与`本地仓库`区别
- 查看`暂存区`与`本地仓库`区别
- 查看`两个版本`之间的区别
- `Git`分支操作
- 分支的好处
- 创建分支`git branch 分支名`
- 查看分支`git branch -v`
- 切换分支`git switch 分支名`
- 比较`分支`之间的区别`git diff`
- 合并分支`git merge 指定分支名`
- 合并时发生冲突的解决案例
- 合并`second`分支中新创建的文件`file2.txt`案例
- 删除分支`git branch -d 分支名`
- 删除`工作区`和`暂存区`文件`git rm 文件名`
- 删除`暂存区`文件,保留`工作区`
- `.gitignore`文本
- 团队内协作
- 跨团队协作
- GitHub 操作
- 认识github
- 注册github
- 创建远程仓库
- github上删除文件
- github上删除仓库
- 远程仓库操作
- 连接远程仓库`git remote add 别名 远程地址`
- 查看当前所有远程地址别名`git remote -v`
- 断开远程仓库`git remote remove 别名`
- 推送`本地分支`到`远程`仓库`git push 别名 分支`
- 克隆`远程仓库`到`本地`仓库`git clone 远程地址`
- 修改别名`git remote rename 原名 新名`
- 拉取远程库内容`git pull 远程仓库别名 远程分支名`
版本控制
版本控制
其实最重要的是可以记录文件修改历史记录
,从而让用户能够查看历史版本
,方便版本切换。版本控制
的好处在于可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。eg
:假如你今晚需要上线软件的4版本
,但在这过程中测试人员发现4版本里有bug
,而开发人员无法及时赶来修改bug,这时便可以运用版本控制回溯到之前的3版本
集中化
版本控制
集中化
版本控制系统(常见的有SVN
,CVS
等)- 都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
好处
:每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。缺点
:中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
分布式
版本控制
分布式
版本控制系统(Git,Mercurial、Bazaar、Darcs等,常见的有Git
)。- 像
Git
这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下载到本地库
。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取
操作,实际上都是一次对整个文件仓库的完整备份。 - 分布式的版本控制系统出现之后,
解决了集中式版本控制系统的缺陷:
服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的); 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
- 像
Git
简史
Git
工作机制
- 本地工作机制
- 本地-远程工作机制
Git
和代码托管中心
代码托管中心
是基于网络服务器
的远程代码仓库
,一般我们简单称为远程库
。
局域网
- GitLab
互联网
- GitHub(外网)
- Gitee 码云(国内网站)
Git
安装
https://blog.csdn.net/qq_42547733/article/details/129956784
基础配置
Git
首次安装必须设置用户签名
,否则无法提交代码。
13289@huazi MINGW64 /d/GitRepo
$ git --version #查看git版本
git version 2.40.0.windows.113289@huazi MINGW64 /d/GitRepo
$ git config --global user.name "huazi" #设置用户名13289@huazi MINGW64 /d/GitRepo
$ git config --global user.email huazi@mail.com #设置邮箱
13289@huazi MINGW64 /d/GitRepo
$ git config --global --list #查看配置
user.name=huazi
user.email=huazi@mail.com
git的–local,–global,–system的区别
在使用Git时,--local
、--global
和 --system
这些选项主要与Git的配置相关。这些选项指定了Git应该读取或写入哪个级别的配置设置。以下是这些选项之间的主要区别:
-
–local(或省略这些选项)
- 默认情况下,如果你不使用
--local
、--global
或--system
选项,Git会使用本地仓库的配置。 - 这些配置存储在仓库的
.git/config
文件中。 - 它们只影响当前仓库。
- 常见的本地配置包括仓库特定的别名、远程仓库的URL等。
- 默认情况下,如果你不使用
-
–global
- 这些配置会影响系统上所有Git仓库的用户。
- 它们存储在用户的家目录下的
.gitconfig
文件中(在Windows上通常是C:\Users\YourUsername\.gitconfig
,在Unix/Linux/macOS上是~/.gitconfig
或~/.config/git/config
)。 - 常见的全局配置包括用户的姓名和电子邮件地址(用于Git提交)、默认文本编辑器、默认的合并和差异工具等。
-
–system
- 这些配置会影响系统上所有用户的所有Git仓库。
- 它们通常存储在Git的安装目录中的某个配置文件中(位置取决于你的操作系统和Git的安装方式)。
- 系统级别的配置通常用于管理员设置整个系统范围的Git默认值。
- 在日常使用中,系统级别的配置很少被普通用户修改。
如何查看和设置这些配置
你可以使用 git config
命令来查看和设置这些配置。
- 查看当前级别的配置:
git config --list
- 查看本地仓库的配置:
git config --local --list
- 查看全局配置:
git config --global --list
- 查看系统配置:
git config --system --list
设置配置时,只需添加 --local
、--global
或 --system
选项,以及要设置的键和值。例如,要设置全局的用户名和电子邮件地址,你可以使用:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
创建仓库
方式1git init
$ git init
13289@huazi MINGW64 /d/GitRepo
$ git init #初始化当前目录GitRepo为git本地仓库
Initialized empty Git repository in D:/GitRepo/.git/13289@huazi MINGW64 /d/GitRepo (main) #main为主分支
$
方式2git clone git网址
$ git clone 网址
13289@huazi MINGW64 /d/GitRepo (main)
$ git clone git@github.com:BCyuanzhiwei/-.git #从远程仓库克隆一个仓库到本地
工作区,暂存区,本地仓库
查看工作区文件ls
$ ls
13289@huazi MINGW64 /d/GitRepo (main)
$ ls
file1.txt
查看暂存区文件git ls-files
$ git ls-files
13289@huazi MINGW64 /d/GitRepo (main)
$ git ls-files
file1.txt
文件状态
查看仓库的状态git status
$ git status
- 这里我们先创建一个
file1.txt
文本,文本中写入6
行hello world!
13289@huazi MINGW64 /d/GitRepo (main)
$ ls
file1.txt
13289@huazi MINGW64 /d/GitRepo (main)
$ ls -a
./ ../ .git/ file1.txt
13289@huazi MINGW64 /d/GitRepo (main)
$ cat file1.txt
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
13289@huazi MINGW64 /d/GitRepo (main)
$ git status #查看仓库的状态
On branch mainNo commits yetUntracked files: #Untracked files表示未被跟踪的文件(use "git add <file>..." to include in what will be committed)file1.txt
添加到暂存区git add
$ git add . #提交当前目录下的所有文件$ git add file*.txt #可以使用通配符$ git add 具体文件名 #提交某一具体文件
13289@huazi MINGW64 /d/GitRepo (main)
$ git add file1.txt13289@huazi MINGW64 /d/GitRepo (main)
$ git status
On branch mainNo commits yetChanges to be committed: #Changes to be committed表示处于暂存区中的文件(use "git rm --cached <file>..." to unstage)new file: file1.txt #显示刚创建的新文件
提交到本地仓库git commit
$ git commit -m "第一次提交" file1.txt #-m表示日志信息,将暂存区中名为file1.txt的文件提交到本地仓库$ git commit #将暂存区中所有文件提交到本地仓库
13289@huazi MINGW64 /d/GitRepo (main)
$ git commit -m "第一次提交" file1.txt
[main (root-commit) 3cda84a] 第一次提交1 file changed, 6 insertions(+)create mode 100644 file1.txt13289@huazi MINGW64 /d/GitRepo (main)
$ git status #无文件显示,说明已经commit到本地仓库
On branch main
nothing to commit, working tree clean
当修改文件内容时
13289@huazi MINGW64 /d/GitRepo (main)
$ git status
On branch main
Changes not staged for commit: #Changes not staged for commit表示修改了本地库中文件的内容(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: file1.txt #显示file1.txt文件被修改过
13289@huazi MINGW64 /d/GitRepo (main)
$ git add . #将工作区的所有文件添加到暂存区13289@huazi MINGW64 /d/GitRepo (main)
$ git status
On branch main
Changes to be committed: #Changes to be committed表示处于暂存区中的文件(use "git restore --staged <file>..." to unstage)modified: file1.txt #显示file1.txt文件被修改过
13289@huazi MINGW64 /d/GitRepo (main)
$ git commit
[main 9c00261] 第二次提交1 file changed, 1 insertion(+), 1 deletion(-)13289@huazi MINGW64 /d/GitRepo (main)
$ git status #无文件显示,说明已经全部commit到本地仓库
On branch main
nothing to commit, working tree clean
13289@huazi MINGW64 /d/GitRepo (main)
$ cat file1.txt
hello world!
hello world!
hello world!
hello world!
hello world!我是麦当
hello world!
- 总结:当文件内容被修改时,需要重新
git add
,git commit
到本地仓库,形成新的版本
查看仓库提交历史git log
$ git log #查看仓库提交历史记录$ git log --oneline #查看简洁的提交记录$ git reflog #查看历史记录
13289@huazi MINGW64 /d/GitRepo (main)
$ git log
commit 9c00261810f9f2aa2976f686070bafebb2bd6eae (HEAD -> main)
Author: huazi <huazi@mail.com>
Date: Fri May 10 18:21:14 2024 +0800第二次提交commit 3cda84aae3cc9d753aabc5ce48893b97e8d4406b
Author: huazi <huazi@mail.com>
Date: Fri May 10 18:13:19 2024 +0800第一次提交
13289@huazi MINGW64 /d/GitRepo (main)
$ git log --oneline
9c00261 (HEAD -> main) 第二次提交 #HEAD指向最新提交版本
3cda84a 第一次提交
13289@huazi MINGW64 /d/GitRepo (main)
$ git reflog
9c00261 (HEAD -> main) HEAD@{0}: commit: 第二次提交
3cda84a HEAD@{1}: reset: moving to 3cda84a
3cda84a HEAD@{2}: reset: moving to 3cda84a
3cda84a HEAD@{3}: commit (initial): 第一次提交
版本穿梭git reset
Git
中的所有提交
都是可以回溯
的- 这里主要介绍
git reset --hard 提交id
$ git log --oneline
9c00261 (HEAD -> main) 第二次提交
3cda84a 第一次提交13289@huazi MINGW64 /d/GitRepo (main)
$ git reset --hard 3cda84a
HEAD is now at 3cda84a 第一次提交13289@huazi MINGW64 /d/GitRepo (main)
$ git log --oneline
3cda84a (HEAD -> main) 第一次提交
13289@huazi MINGW64 /d/GitRepo (main)
$ git reflog
3cda84a (HEAD -> main) HEAD@{0}: reset: moving to 3cda84a
9c00261 HEAD@{1}: reset: moving to 9c00261
3cda84a (HEAD -> main) HEAD@{2}: reset: moving to 3cda84a
3cda84a (HEAD -> main) HEAD@{3}: reset: moving to 3cda84a
3cda84a (HEAD -> main) HEAD@{4}: reset: moving to 3cda84a
9c00261 HEAD@{5}: commit: 第二次提交
3cda84a (HEAD -> main) HEAD@{6}: reset: moving to 3cda84a
3cda84a (HEAD -> main) HEAD@{7}: reset: moving to 3cda84a
3cda84a (HEAD -> main) HEAD@{8}: commit (initial): 第一次提交13289@huazi MINGW64 /d/GitRepo (main)
$ git reset --hard 9c00261
HEAD is now at 9c00261 第二次提交13289@huazi MINGW64 /d/GitRepo (main)
$ git log --oneline
9c00261 (HEAD -> main) 第二次提交
3cda84a 第一次提交
- 总结:
Git
中的所有提交
都是可以回溯
的 - 总结:
Git
切换版本,底层其实是移动的HEAD
指针
查看工作区
与暂存区
区别
$ git diff #无区别不显示内容
查看工作区+暂存区
与本地仓库
区别
$ git diff head #无区别不显示内容
查看暂存区
与本地仓库
区别
$ git diff --cached #无区别不显示内容
或
$ git diff --staged #无区别不显示内容
查看两个版本
之间的区别
$ git diff 3cda84a 9c00261
13289@huazi MINGW64 /d/GitRepo (main)
$ git diff 3cda84a 9c00261
diff --git a/file1.txt b/file1.txt
index e95c22e..b476406 100644
--- a/file1.txt
+++ b/file1.txt
@@ -2,5 +2,5 @@ hello world!hello world!hello world!hello world!
-hello world!
+hello world!我是麦当hello world!
\ No newline at end of file
Git
分支操作
- 在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来。开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,
分支可以简单理解为副本,一个分支就是一个单独的副本
。(相当于从主分支的当前版本中复制出另一个分支
)(分支底层其实也是指针的引用
)
分支的好处
- 同时并行推进多个功能开发,提高开发效率。
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
创建分支git branch 分支名
$ git branch 分支名
13289@huazi MINGW64 /d/GitRepo (main)
$ git branch second13289@huazi MINGW64 /d/GitRepo (main)
$ git branch -v
* main 9c00261 第二次提交 #*所在位置为当前分支second 9c00261 第二次提交
# 分支名 分支编号 版本13289@huazi MINGW64 /d/GitRepo (main)
$ git branch
* mainsecond
查看分支git branch -v
$ git branch -v
13289@huazi MINGW64 /d/GitRepo (main)
$ git branch -v
* main 9c00261 第二次提交 #*所在位置为当前分支second 9c00261 第二次提交
# 分支名 分支编号 版本
切换分支git switch 分支名
$ git checkout 分支名
或
$ git switch 分支名 #(常用)
13289@huazi MINGW64 /d/GitRepo (main)
$ git checkout second
Switched to branch 'second'13289@huazi MINGW64 /d/GitRepo (second)
$ git branch -vmain 9c00261 第二次提交
* second 9c00261 第二次提交13289@huazi MINGW64 /d/GitRepo (second)
$ git switch main
Switched to branch 'main'13289@huazi MINGW64 /d/GitRepo (main)
$ git branch -v
* main 9c00261 第二次提交second 9c00261 第二次提交
比较分支
之间的区别git diff
$ git diff 分支名 分支名
13289@huazi MINGW64 /d/GitRepo (main)
$ git diff main second #无区别不显示内容
合并分支git merge 指定分支名
- 把
指定的分支
合并到当前分支
上
合并时发生冲突的解决案例
- 先在
main
分支上修改file1.txt
的内容,之后git add
,git commit
13289@huazi MINGW64 /d/GitRepo (main)
$ vim file1.txt
13289@huazi MINGW64 /d/GitRepo (main)
$ cat file1.txt
hello world!main
hello world!
hello world!
hello world!
hello world!我是麦当
hello world!
13289@huazi MINGW64 /d/GitRepo (main)
$ git add file1.txt13289@huazi MINGW64 /d/GitRepo (main)
$ git status
On branch main
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified: file1.txt13289@huazi MINGW64 /d/GitRepo (main)
$ git commit -m "main分支上第三次提交" file1.txt
[main c5e8ecd] main分支上第三次提交1 file changed, 2 insertions(+), 2 deletions(-)
- 切换到
second
分支
13289@huazi MINGW64 /d/GitRepo (main)
$ git switch second
Switched to branch 'second'13289@huazi MINGW64 /d/GitRepo (second)
$ cat file1.txt
hello world!
hello world!
hello world!
hello world!
hello world!我是麦当
hello world!
-
总结:1.分支之间的内容修改互不影响
-
2.当创建一个新分支时,相当于完全复制了主分支形成一个新的分支
-
修改
second
分支中的内容,之后git add
,git commit
13289@huazi MINGW64 /d/GitRepo (second)
$ vim file1.txt
13289@huazi MINGW64 /d/GitRepo (second)
$ git add file1.txt13289@huazi MINGW64 /d/GitRepo (second)
$ git status
On branch second
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified: file1.txt13289@huazi MINGW64 /d/GitRepo (second)
$ git commit -m "second分支第一次提交" file1.txt
[second 792bcf4] second分支第一次提交1 file changed, 2 insertions(+), 2 deletions(-)13289@huazi MINGW64 /d/GitRepo (second)
$ git status
On branch second
nothing to commit, working tree clean
13289@huazi MINGW64 /d/GitRepo (second)
$ cat file1.txt
hello world!second
hello world!
hello world!
hello world!
hello world!我是麦当
hello world!
- 切换到
main
分支,后合并second
分支到main
分支
13289@huazi MINGW64 /d/GitRepo (second)
$ git switch main
Switched to branch 'main'13289@huazi MINGW64 /d/GitRepo (main)
$ cat file1.txt
hello world!main
hello world!
hello world!
hello world!
hello world!我是麦当
hello world!
13289@huazi MINGW64 /d/GitRepo (main)
$ git merge second #我们发现合并过程中发生了冲突,这时需要我们手动修改文件内容
Auto-merging file1.txt
CONFLICT (content): Merge conflict in file1.txt
Automatic merge failed; fix conflicts and then commit the result.13289@huazi MINGW64 /d/GitRepo (main|MERGING)
$
- 查看冲突文件
13289@huazi MINGW64 /d/GitRepo (main|MERGING)
$ vim file1.txt
<<<<<<< HEAD
hello world!main
=======
hello world!second
>>>>>>> second
hello world!
hello world!
hello world!
hello world!我是麦当
hello world!
<<<<<<< HEAD
当前分支的代码
=======
合并过来的代码
>>>>>>>
- 手动修改解决文件内容冲突
git add
,git commit
操作- 注意:使用
git commit
命令时不能带文件名
- 注意:使用
13289@huazi MINGW64 /d/GitRepo (main|MERGING)
$ git add file1.txt13289@huazi MINGW64 /d/GitRepo (main|MERGING)
$ git status
On branch main
All conflicts fixed but you are still merging.(use "git commit" to conclude merge)Changes to be committed:modified: file1.txt13289@huazi MINGW64 /d/GitRepo (main|MERGING)
$ git commit -m "解决冲突后的提交"
[main 2abad93] 解决冲突后的提交#我们发现后面 MERGING 消失,变为正常
13289@huazi MINGW64 /d/GitRepo (main)
$
13289@huazi MINGW64 /d/GitRepo (main)
$ cat file1.txt
hello world!main+second
hello world!
hello world!
hello world!
hello world!我是麦当
hello world!
合并second
分支中新创建的文件file2.txt
案例
main
分支中没有file2.txt
文件
13289@huazi MINGW64 /d/GitRepo (main)
$ ls
file1.txt
- 先切换到
second
分支
13289@huazi MINGW64 /d/GitRepo (main)
$ git switch second
Switched to branch 'second'
- 创建
file2.txt
13289@huazi MINGW64 /d/GitRepo (second)
$ vim file2.txt
13289@huazi MINGW64 /d/GitRepo (second)
$ cat file2.txt
hello!
hello!
git add
,git commit
操作
13289@huazi MINGW64 /d/GitRepo (second)
$ git status
On branch second
Untracked files:(use "git add <file>..." to include in what will be committed)file2.txt13289@huazi MINGW64 /d/GitRepo (second)
$ git add file2.txt
warning: in the working copy of 'file2.txt', LF will be replaced by CRLF the next time Git touches it13289@huazi MINGW64 /d/GitRepo (second)
$ git status
On branch second
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file: file2.txt13289@huazi MINGW64 /d/GitRepo (second)
$ git commit -m "second分支file2.txt提交" file2.txt
warning: in the working copy of 'file2.txt', LF will be replaced by CRLF the next time Git touches it
[second 121c873] second分支file2.txt提交1 file changed, 2 insertions(+)create mode 100644 file2.txt13289@huazi MINGW64 /d/GitRepo (second)
$ git status
On branch second
nothing to commit, working tree clean
- 切换到
main
分支
13289@huazi MINGW64 /d/GitRepo (second)
$ git switch main
Switched to branch 'main'
- 合并分支
13289@huazi MINGW64 /d/GitRepo (main)
$ git merge second
Merge made by the 'ort' strategy.file2.txt | 2 ++1 file changed, 2 insertions(+)create mode 100644 file2.txt
13289@huazi MINGW64 /d/GitRepo (main)
$ ls
file1.txt file2.txt13289@huazi MINGW64 /d/GitRepo (main)
$ cat file2.txt
hello!
hello!
- 合并成功
13289@huazi MINGW64 /d/GitRepo (main)
$ git log --oneline
8821fa7 (HEAD -> main) 合并分支'second'中的file2.txt文件`
121c873 (second) second分支file2.txt提交
2abad93 解决冲突后的提交
792bcf4 second分支第一次提交
c5e8ecd main分支上第三次提交
9c00261 第二次提交
3cda84a 第一次提交
- 总结:
合并
操作也是一种提交
操作
删除分支git branch -d 分支名
$ git branch -d 分支名
或
$ git branch -D 分支名 #强制删除
删除工作区
和暂存区
文件git rm 文件名
$ git rm 文件名
- 查看
工作区
和暂存区
文件
13289@huazi MINGW64 /d/GitRepo (main)
$ ls
file1.txt file2.txt13289@huazi MINGW64 /d/GitRepo (main)
$ git ls-files
file1.txt
file2.txt
- 删除
file2.txt
13289@huazi MINGW64 /d/GitRepo (main)
$ git rm file2.txt
rm 'file2.txt'
- 查看
工作区
和暂存区
文件
13289@huazi MINGW64 /d/GitRepo (main)
$ ls
file1.txt13289@huazi MINGW64 /d/GitRepo (main)
$ git ls-files
file1.txt
- 查看状态
13289@huazi MINGW64 /d/GitRepo (main)
$ git status
On branch main
Changes to be committed:(use "git restore --staged <file>..." to unstage)deleted: file2.txt
git commit
操作
13289@huazi MINGW64 /d/GitRepo (main)
$ git commit -m "删除file2.txt的提交" file2.txt
[main 460acbd] 删除file2.txt的提交1 file changed, 2 deletions(-)delete mode 100644 file2.txt
- 总结:删除文件后,需要提交
删除暂存区
文件,保留工作区
$ git rm --cached 文件名
.gitignore
文本
13289@huazi MINGW64 /d/GitRepo (main)
$ vim .gitignore
13289@huazi MINGW64 /d/GitRepo (main)
$ cat .gitignore
#忽略所有的.a文件
*.a#忽略access.log文件
access.log
团队内协作
跨团队协作
GitHub 操作
认识github
https://blog.csdn.net/m0_59188912/article/details/124912340
注册github
https://blog.csdn.net/m0_59188912/article/details/124912340
创建远程仓库
https://blog.csdn.net/m0_59188912/article/details/124912340
github上删除文件
https://blog.csdn.net/nnKevi/article/details/130667697
github上删除仓库
https://blog.csdn.net/baguette/article/details/131932777
远程仓库操作
- 1.先创建远程仓库
- 2.生成本地ssh密钥
- 2.1生成密钥:
$ ssh-keygen -t rsa
,不断回车,如果密钥之前已经存在,则会覆盖之前的密钥- 私钥文件:
id_rsa
- 公钥文件:
id_rsa.pub
- 私钥文件:
- 2.2获取公钥:
$ cat ~/.ssh/id_rsa.pub
- 2.1生成密钥:
- 3.远程仓库
$ git remote add origin git网址
- 其中,
git网址的别名是origin
- 其中,
- 4.查看当前是否有正在远程的仓库
$ git remote -v
连接远程仓库git remote add 别名 远程地址
$ git remote add 别名 远程地址
13289@huazi MINGW64 /d/GitRepo (main)
$ git remote add origin1 git@github.com:huazi-striving/test.git13289@huazi MINGW64 /d/GitRepo (main)
$ git remote -v #查看当前所有的远程地址
origin1 git@github.com:huazi-striving/test.git (fetch)
origin1 git@github.com:huazi-striving/test.git (push)
查看当前所有远程地址别名git remote -v
$ git remote -v
断开远程仓库git remote remove 别名
$ git remote remove 别名
13289@huazi MINGW64 /d/GitRepo (main)
$ git remote remove origin113289@huazi MINGW64 /d/GitRepo (main)
$ git remote -v
推送本地分支
到远程
仓库git push 别名 分支
- 推送本地分支上的内容到远程仓库
$ git push [-f] 别名 分支 #-f强制推送
13289@huazi MINGW64 /d/GitRepo (main)
$ git push -f origin main
Enumerating objects: 24, done.
Counting objects: 100% (24/24), done.
Delta compression using up to 16 threads
Compressing objects: 100% (18/18), done.
Writing objects: 100% (24/24), 2.29 KiB | 587.00 KiB/s, done.
Total 24 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), done.
To github.com:huazi-striving/test.git+ ab2f785...0673cc2 main -> main (forced update)
- 此时发现已将我们
main
分支上的内容推送到GitHub
创建的远程仓库
克隆远程仓库
到本地
仓库git clone 远程地址
$ git clone 远程地址
- 删除本地仓库
- 克隆
远程仓库
到本地
13289@huazi MINGW64 /d/GitRepo (main)
$ #回车后成为普通目录13289@huazi MINGW64 /d/GitRepo
$ git clone git@github.com:huazi-striving/test.git
Cloning into 'test'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 24 (delta 2), reused 24 (delta 2), pack-reused 0
Receiving objects: 100% (24/24), done.
Resolving deltas: 100% (2/2), done.13289@huazi MINGW64 /d/GitRepo
$ ls
test/ #test目录是我们的远程仓库13289@huazi MINGW64 /d/GitRepo
$ cd test/13289@huazi MINGW64 /d/GitRepo/test (main)
$ ls
file1.txt
修改别名git remote rename 原名 新名
$ git remote rename origin ori
13289@huazi MINGW64 /d/GitRepo/test (main)
$ git remote rename origin ori
Renaming remote references: 100% (3/3), done.13289@huazi MINGW64 /d/GitRepo/test (main)
$ git remote -v
ori git@github.com:huazi-striving/test.git (fetch)
ori git@github.com:huazi-striving/test.git (push)
拉取远程库内容git pull 远程仓库别名 远程分支名
- 将
远程仓库
对于分支最新版本内容
拉下来后与当前本地分支直接合并
$ git pull 远程仓库别名 远程分支名
相关文章:

一篇详解Git版本控制工具
华子目录 版本控制集中化版本控制分布式版本控制 Git简史Git工作机制Git和代码托管中心局域网互联网 Git安装基础配置git的--local,--global,--system的区别 创建仓库方式1git init方式2git clone git网址 工作区,暂存区,本地仓库…...

谷歌邮箱2024最新注册教程
大家好,我是蓝胖子,今天教大家如何注册谷歌邮箱 谷歌邮箱的注册后面的用途会经常用得到 首先,需要魔法自行解决 第一步:打开谷歌官网 www.google.com 确保谷歌官网能正常打开 第二步:创建账号 接下来可能会遇到这…...
Spring事务深度解析
Spring事务深度解析 介绍 在现代的软件开发中,事务管理是一个非常重要的话题。Spring框架提供了强大的事务管理功能,使得开发人员能够轻松地处理数据库操作的一致性和并发性问题。本文将深入探讨Spring事务的原理和使用方法。 什么是事务?…...

机器学习周报第41周
目录 摘要Abstract一、文献阅读1.1 摘要1.2 背景1.3 论文方法1.3.1 局部特征提取1.3.2 局部特征转换器 (LoFTR) 模块1.3.4 建立粗粒度匹配1.3.5 精细匹配 1.4 损失1.5 实现细节1.6 实验1.6.1 单应性估计1.6.2 相对位姿估计 二、论文代码总结 摘要 本周阅读了一篇特征匹配领域的…...

gin框架学习笔记(三) ——路由请求与相关参数
参数种类与参数处理 查询参数 在讲解查询参数的定义之前,我们先来看一个例子,当我打开了CSDN,我现在想查看我的博客浏览量,那么我就需要点击我的头像来打开我的个人主页,像下面这样: 我们现在把浏览器的网址取下来,…...
HTML常用标签-多媒体标签(图片、音频、视频)
多媒体标签 1 图片标签2 音频标签3 视频标签 1 图片标签 img(重点) 图片标签,用于在页面上引入图片 代码 <!-- src用于定义图片的连接 title用于定义鼠标悬停时显示的文字 alt用于定义图片加载失败时显示的提示文字 --> <img src"路径" title"悬停显…...
Flutter 中的 AnimatedIcon 小部件:全面指南
Flutter 中的 AnimatedIcon 小部件:全面指南 AnimatedIcon是Flutter Material组件库中的一个独特动画组件,它允许开发者在两个图标之间进行平滑的过渡动画。这使得它非常适合用于表示应用程序的状态变化,如菜单打开/关闭、搜索打开/关闭等。…...

0510Goods的Maven项目
0510Goods的Maven项目包-CSDN博客 数据库字段 商品主页 修改页面 点击商品主页更改信息, 跳转到修改页面, 并保留初始信息。 商品类别最多选取三项,最少选取一项 添加界面 商品类别最多选取三项,最少选取一项...

使用Pyramid、Mako和PyJade生成 HTML
Pyramid 是一个流行的 Python Web 框架,而 Mako 和 PyJade 是用于模板引擎的工具,它们可以与 Pyramid 配合使用来生成 HTML 内容。但是在实际使用中还是有些差别的,尤其会遇到各种各样的问题,下面我将利用我所学的知识一一为大家解…...

什么是Facebook付费广告营销?
Facebook作为全球最大的社交平台之一,成为了跨境卖家不可或缺的营销阵地。它不仅拥有庞大的用户基数,还提供了丰富的广告工具和社群互动功能,让商家能够精准触达目标市场,提升品牌影响力。云衔科技通过Facebook付费广告营销的专业…...

面对.halo勒索病毒,如何有效防范与应对?
导言: 随着网络技术的不断发展,网络安全问题也日益凸显。其中,勒索病毒作为一种极具破坏性的网络攻击手段,近年来在全球范围内频发。其中,.halo勒索病毒作为勒索病毒家族中的一员,其危害性和传播性不容忽视…...

JSON 转为json串后出现 “$ref“
问题描述 转为JSON 串时出现 "$ref":"$.RequestParam.list[0]" $ref: fastjson数据重复的部分会用引用代替,当一个对象包含另一个对象时,fastjson就会把该对象解析成引用 “$ref”:”..” 上一级 “$ref”:”” 当前对…...

Nachi那智不二越机器人维修技术合集
一、Nachi机械手维护基础知识 1. 定期检查:定期检查机器人的各个部件,如机械手伺服电机、机器人减速器、机械臂传感器等,确保其运行正常。 2. 清洁与润滑:定期清洁Nachi工业机器人表面和内部,并使用合适的润滑油进行润…...

C++类与对象基础探秘系列(二)
目录 类的6个默认成员函数 构造函数 构造函数的概念 构造函数的特性 析构函数 析构函数的概念 析构函数的特性 拷贝构造函数 拷贝构造函数的概念 拷贝构造函数的特性 赋值运算符重载 运算符重载 赋值运算符重载 const成员 const修饰类的成员函数 取地址及const取地址操作…...

MyBatis-Plus核心功能详解:条件构造器、自定义SQL与Service接口
在Java的Web开发中,MyBatis-Plus作为MyBatis的增强工具,提供了许多实用的功能,极大地简化了数据库操作的开发过程。下面,我们将详细探讨MyBatis-Plus的三大核心功能:条件构造器、自定义SQL以及Service接口。 一、条件…...

莆田市C++专项选拔第二轮题4
题4:变换阵型 【题目描述】 盛隆同学刚学完C的二维数组和函数部分,于是他自己写了2个函数对二维数组进行练习。两个函数如下: int n, a[1005][1005]; // 注意,这里的n和数组a是全局变量 void f1() {for (int i 1; i < n; i)…...
AtCoder Regular Contest 177
A - Excange 题意 用这些零钱能否不找零地买这些物品 思路 因为 500 5 100 10 50 50 10 500 1 5005\times 10010\times 5050\times 10500\times 1 5005100105050105001。 所以说,我们这道题可以采用贪心算法,优先取大的减去目前零钱最大的…...

【C++】 C++ 编写 鸡兔同笼程序
文章目录 “鸡兔同笼”问题是一个经典的数学问题,要求根据总头数和总腿数来计算鸡和兔的数量。假设鸡有 2 条腿,兔有 4 条腿。可以通过以下步骤求解这个问题: 1 .设鸡的数量为 x,兔的数量为 y。2.根据题意,我们有以下…...

[动画详解]LeetCode151.翻转字符串里的单词
💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到动画详解LeetCode算法系列 用通俗易懂的动画让算法题不再神秘 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成…...

如何使用 ArcGIS Pro 制作地震动画
在做某些汇报的时候,除了图文,如果有动画肯定会成为加分项,这里为大家介绍一下如何使用 ArcGIS Pro 制作地震动画,希望能对你有所帮助。 添加时间 在图层属性内,选择时间选项卡,图层时间选择每个要素具有…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...