一篇详解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上删除文件
  • 远程仓库操作
  • 连接远程仓库`git remote add 别名 远程地址`
  • 查看当前所有远程地址别名`git remote -v`
  • 断开远程仓库`git remote remove 别名`
  • 推送`本地分支`到`远程`仓库`git push 别名 分支`
  • 克隆`远程仓库`到`本地`仓库`git clone 远程地址`
  • 修改别名`git remote rename 原名 新名`
  • 拉取远程库内容`git pull 远程仓库别名 远程分支名`

版本控制

  • 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本方便版本切换。
  • 版本控制的好处在于可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。
  • eg:假如你今晚需要上线软件的4版本,但在这过程中测试人员发现4版本里有bug,而开发人员无法及时赶来修改bug,这时便可以运用版本控制回溯到之前的3版本

集中化版本控制

  • 集中化版本控制系统(常见的有SVNCVS等)
    • 都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
    • 好处每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。
    • 缺点:中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
    • 在这里插入图片描述

分布式版本控制

  • 分布式版本控制系统(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.1


13289@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应该读取或写入哪个级别的配置设置。以下是这些选项之间的主要区别:

  1. –local(或省略这些选项)

    • 默认情况下,如果你不使用 --local--global--system 选项,Git会使用本地仓库的配置。
    • 这些配置存储在仓库的 .git/config 文件中。
    • 它们只影响当前仓库。
    • 常见的本地配置包括仓库特定的别名、远程仓库的URL等。
  2. –global

    • 这些配置会影响系统上所有Git仓库的用户。
    • 它们存储在用户的家目录下的 .gitconfig 文件中(在Windows上通常是 C:\Users\YourUsername\.gitconfig,在Unix/Linux/macOS上是 ~/.gitconfig~/.config/git/config)。
    • 常见的全局配置包括用户的姓名和电子邮件地址(用于Git提交)、默认文本编辑器、默认的合并和差异工具等。
  3. –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文本,文本中写入6hello 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 main

No commits yet

Untracked 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.txt

13289@huazi MINGW64 /d/GitRepo (main)
$ git status
On branch main

No commits yet

Changes 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.txt

13289@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 addgit 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 second

13289@huazi MINGW64 /d/GitRepo (main)
$ git branch -v
* main   9c00261 第二次提交   #*所在位置为当前分支
  second 9c00261 第二次提交
# 分支名  分支编号   版本


13289@huazi MINGW64 /d/GitRepo (main)
$ git branch
* main
  second

查看分支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 -v
  main   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 addgit 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.txt

13289@huazi MINGW64 /d/GitRepo (main)
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   file1.txt


13289@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 addgit commit

13289@huazi MINGW64 /d/GitRepo (second)
$ vim file1.txt

在这里插入图片描述

13289@huazi MINGW64 /d/GitRepo (second)
$ git add file1.txt

13289@huazi MINGW64 /d/GitRepo (second)
$ git status
On branch second
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   file1.txt


13289@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 addgit commit操作
    • 注意:使用 git commit 命令时不能带文件名
13289@huazi MINGW64 /d/GitRepo (main|MERGING)
$ git add file1.txt

13289@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.txt

13289@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 addgit 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.txt

13289@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 it

13289@huazi MINGW64 /d/GitRepo (second)
$ git status
On branch second
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   file2.txt


13289@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.txt

13289@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.txt

13289@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.txt

13289@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.txt

13289@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

注册github

创建远程仓库

https://blog.csdn.net/m0_59188912/article/details/124912340

github上删除文件

https://blog.csdn.net/nnKevi/article/details/130667697

远程仓库操作

  • 1.先创建远程仓库
  • 2.生成本地ssh密钥
    • 2.1生成密钥:$ ssh-keygen -t rsa,不断回车,如果密钥之前已经存在,则会覆盖之前的密钥
      • 私钥文件:id_rsa
      • 公钥文件:id_rsa.pub
    • 2.2获取公钥:$ cat ~/.ssh/id_rsa.pub
  • 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.git

13289@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 origin1

13289@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 远程仓库别名 远程分支名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/611318.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

将AI融入项目开发工作中去吧

目录 1.提高编写开发日报的效率 2.提高编写代码注释的效率 3.提高代码重构的效率 4.编写测试用例及测试报告 5. 协助进行代码走查与工作量分析 在AI元年后&#xff0c;作为一名程序员&#xff0c;相信各位友友已经深切地感受到了它带来的变革。作为一个从小白到资深码农的…

canvas识别路线

theme: jzman 视频说明 jvideo 前言 效果一 技术栈 htmljavascriptcsscanvas 项目主要功能上传一张地图&#xff0c;或者迷宫地图&#xff0c;通过canvas的一系列操作&#xff0c;并指定一个起点和终点&#xff0c;并找到到达终点最近的路线 迷宫找出口效果 正文 加载图像 首先…

芋道系统springcloud模块启动报错,枚举类不能为空

问题描述&#xff1a; Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2024-05-10 15:50:15.756 | ERROR 9120 | main [TID: N/A] o.s.b.d.LoggingFailureAnalysisReporter | ************************…

【C++】详细版 RAII技术的应用之智能指针(智能指针发展历程和简单模拟实现介绍)

目录 前言 一、智能指针有什么用&#xff1f; 二、什么是RAII(智能指针的底层思想)&#xff1f; 三、智能指针的发展历程以及模拟实现 1.auyo_ptr&#xff08;C98&#xff09; 2.unique_ptr&#xff08;C11&#xff09; 3.shared_ptr&#xff08;C11&#xff09; 前言 C中…

面向对象 03:类与对象的创建、初始化和使用,通过 new 关键字调用构造方法,以及创建对象过程的内存分析

一、前言 记录时间 [2024-05-10] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 11&#xff1a;Java 方法相关内容&#xff0c;方法的设计原则&#xff0c;以及方法的定义和调用 面向对象 01&#xff1a;Java 面向对…

使用com.google.common.collect依赖包中的Lists.transform()方法转换集合对象之后,修改集合中的对象属性,发现不生效

目录 1.1、错误描述 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;模拟代码 &#xff08;3&#xff09;运行结果 1.2、解决方案 1.1、错误描述 最近在开发过程中&#xff0c;使用到了com.google.common.collect依赖包&#xff0c;通过这个依赖包中提供的…

4D 成像毫米波雷达:新型传感器助力自动驾驶

1 感知是自动驾驶的首要环节&#xff0c;高性能传感器必不可少 感知环节负责对侦测、识别、跟踪目标&#xff0c;是自动驾驶实现的第一步。自动驾驶的实现&#xff0c;首先要能够准确理解驾驶环境信息&#xff0c;需要对交通主体、交通信号、环境物体等信息进行有效捕捉&#x…

2024-AIDD-人工智能药物设计-AlphaFold3

AlphaFold3&#xff5c;万字长文解读 AlphaFold3预测所有分子相互作用准确结构 AlphaFold3 自2021年AlphaFold2问世以来&#xff0c;科研工作者们便开始利用这一蛋白结构预测模型来详细描绘众多蛋白质的结构、探索新药。近日&#xff0c;Google DeepMind公司推出了其最新产品…

[附源码]石器时代_恐龙宝贝内购版_三网H5手游_带GM工具

石器时代之恐龙宝贝内购版_三网H5经典怀旧Q萌全网通手游_Linux服务端源码_视频架设教程_GM多功能授权后台_CDK授权后台 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff0…

《Python编程从入门到实践》day24

# 昨日知识点学习 创建外星人从一个到一行 # 主程序snipdef _create_fleet(self):"""创建外星人群"""# 创建一个外星人并计算一行可容纳多少个外星人# 外星人的间距为外星人的宽度alien Alien(self)alien_width alien.rect.widthavailable_sp…

Android 屏幕适配全攻略(上)-掌握屏幕单位,应对千变万化的设备

本文从 Android 开发中常见的长度单位 px、dp、sp 入手&#xff0c;详细介绍了它们的特点及转换关系。 接着深入探讨了屏幕尺寸、分辨率、像素密度等重要的屏幕指标&#xff0c;帮助读者全面理解它们之间的联系。最后&#xff0c;通过实例代码演示了如何在代码中进行单位转换&…

从头开始的建材类电商小程序开发指南

在当今数字化时代&#xff0c;小程序已经成为了许多企业推广和销售的重要渠道。对于建筑材料行业来说&#xff0c;开发一个属于自己的小程序商城不仅可以提升产品曝光度&#xff0c;还可以提供更好的用户购物体验。下面&#xff0c;我们将逐步教你如何开发建筑材料行业小程序。…

【c++算法篇】双指针(下)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;算法笔记仓 朋友们大家好啊&#xff0c;本篇文章我们来到算法的双指针的第二部分 目录 1.有效三角形的个数2.查找总价格为目标值的两个商品3.三数之和4.四数之和5.双指针常见场景总结 1.有效三角形…

【Linux】Linux——Centos7安装Nginx

不需要安装包 1.安装依赖 #查看 C 环境是否安装gcc -v #查看 zlib 是否安装cat /usr/lib64/pkgconfig/zlib.pc #查看 pcre 是否安装pcre-config --version 2.安装C #安装C yum install gcc-c 3.安装pcre yum install -y pcre pcre-devel 4.安装zlib #安装 yum install -y zlib…

西米支付:数字藏品元宇宙的介绍与骗局套路解析

一、什么是元宇宙&#xff1f; 元宇宙是一个集体虚拟共享空间&#xff0c;由虚拟增强的物理现实和物理持久的虚拟空间融合而创造&#xff0c;包括所有虚拟世界、增强现实和互联网的总和。简单地说&#xff0c;元宇宙是Web3.0时期的数字世界。 这类新兴概念被非法分子包装后&am…

libssh C++封装之六(Dir)

1 概述 libssh是一个在客户端和服务器端实现SSHv2协议的多平台C库。使用libssh,您可以远程执行程序、传输文件、使用安全透明的隧道、管理公钥等等。本文描述的对libssh客户端功能的C++封装。 libssh下载地址 3 实现 3.5 Dir Dir类型管理远程路径,通过SFTP和Channel实现(有…

Java入门基础学习笔记14——数据类型转换

类型转换&#xff1a; 1、存在某种类型的变量赋值给另一种类型的变量&#xff1b; 2、存在不同类型的数据一起运算。 自动类型转换&#xff1a; 类型范围小的变量&#xff0c;可以直接赋值给类型范围大的变量。 byte类型赋值给int类型&#xff0c;就是自动类型转换。 pack…

20240503安装HEVC解码器播放H265格式的8K视频

20240503安装HEVC解码器播放H265格式的8K视频 2024/5/3 9:55 缘起&#xff1a;由于youtube支持8K视频了&#xff0c;想尝尝鲜&#xff01; 主摄像头当然是选择SONY的【夜摄/弱光场景】&#xff0c;根据优选&#xff0c;小米&#xff08;MI&#xff09;13Ultra 最佳了。 在开始播…

什么是SOL链跟单机器人与阻击机器人?

SOL链作为一个快速增长的区块链生态系统&#xff0c;为各种应用程序提供了丰富的发展机会。在SOL链上&#xff0c;智能合约的应用已经开始蓬勃发展&#xff0c;其中包括了许多与加密货币交易相关的应用。在本文中&#xff0c;我们将介绍在SOL链上开发的阻击机器人&#xff08;S…