当前位置: 首页 > news >正文

git 常用命令整理

git 常用命令整理

在我们第一次使用git时需要对git进行配置

1. 配置git邮箱

我们先进入git仓库目录,对所有仓库设置邮箱

git config --global user.name "Gabriel"
git config --global user.email "Gabriel@qq.com"

如果仅对当前仓库设置邮箱

git config user.name "Gabriel"

查看git配置信息

git config --global --list

2.创建git仓库

我们在本地创建一个git仓库

git init  在当前目录下初始化成git目录
git init myProject 创建一个myProject文件夹,并设置为git仓库

另外,我们可以直接从git网站上clone代码

git clone xxxx(git仓库地址)

示例1:将本地仓库关联远程仓库

我创建一个本地仓库,并关联远程仓库
git remote add origin url
origin是我们新创建的远程仓库别名
git remote add 仓库别名 地址

git remote -v查看远程仓库别名
git branch -M master 指定分支的名称为master

添加远程仓库
git push -u origin main 把我们的main分支和远程的main分支关联起来 -u 等同于upstream
git push -u origin main:main 本地main推送远程main

指定推送的仓库
git push gitlab main
git push 仓库名 分支

拉去远程仓库内容
git pull 远程仓库名 远程分支名:本地分支名
git pull origin main:main
git pull拉去 并合并

git fetch 获取远程仓库的修改,但是不会合并到本地仓库中,需要手动合并

这里,我拉取一个远程仓库

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/myproject
$ git init
Initialized empty Git repository in D:/git_test/myproject/.git/Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/myproject (master)
$ git remote add origin git@github.com:xgy123xx/git.gitAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/myproject (master)
$  git branch -M master如果远程仓库有内容,本地没有,就是用git pull将远程的master分支关联到本地master,并且将内容拉去下来
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/myproject (master)
$ git pull origin master:master
From github.com:xgy123xx/git* [new branch]      master     -> masterAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/myproject (master)
$ ls
a.txt  c  hello  niub如果远程仓库是空的,本地仓库有内容,就使用git push将本地分支推送到远程仓库,使用git push
git push origin master:master
也可以简写 git push origin master

示例2:使用git clone

或者,我从github clone url一个仓库,其中url有https和git两种形式
git clone httts:xxxx. https方式需要用户名和密码
git clone git:xxxx. ssh方式需要配置公钥293
当我们使用git clone git@github.com:xgy123xx/my_home.git发现download不下来,这代表我们没有配置公钥

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test
$ git clone git@github.com:xgy123xx/my_home.git
Cloning into 'my_home.git'...
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test
$
  1. 点击右上角github个人头像选择settings
  2. 进入页面后选择SSH and GPG Keys
  3. 找到SSH keys,点击New SSH Key
  4. 输入自定义title然后使用命令生成ssh公钥即可

在本地电脑生成公钥的方法是

先进入终端输入ssh-keygen -t rsa -b 4096,然后后面直接不断敲回车就能自动生成公钥  Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test
$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:z1AnPAd/Cx4EQkmoXUTvMscsD/a3n3Q6fjqNI4oCXRQ Administrator@DESKTOP-QRFKG91
The key's randomart image is:这时候~/.ssh目录下就会多两个文件,一个id_rsa私钥,一个公钥id_rsa.pub,我们将公钥读取出来,然后赋值到github的ssh key中即可
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test
$ cat ~/.ssh/id_rsa.pub

最后我们再重新git clone就可以clone下来代码

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test
$ git clone git@github.com:xgy123xx/my_home.git
Cloning into 'my_home'...
warning: You appear to have cloned an empty repository.我们可以进入仓库查看到仓库没有东西
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test
$ cd my_home/Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch masterNo commits yetnothing to commit (create/copy files and use "git add" to track)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$

注意

cd .ssh
ssh-keygen -t rsa -b 4096
rsa协议 大小4096

如果我们目录下没有id_rsa文件,我们就直接敲回车就好
如果之前有密钥文件,密钥文件会被覆盖,我们可以换一个名字

id_rsa 私钥文件
id_rsa.pub 公钥文件

自定义文件,需要额外添加配置config

# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test

3.工作区,暂存区,本地仓库

工作区:就是我们本地目录下的文件,我们通常直接接触的文件都在工作区(文件状态可以是未跟踪,如果不将这个文件加入暂存区,这个文件就不会被git管理)
暂存区:过渡区域,提交改动时先提交到暂存区,再提交到仓库;或者文件在本地改动时,也可以直接观察到文件是否被更改(文件状态未修改,已修改)
本地仓库:暂存仓库,通常我们本地修改完提交到的仓库,是先提交到本地仓库,再更新到远程仓库。
注意:git不会对空文件夹进行跟踪

git status 查看当前仓库的状态,当本地文件或者暂存区有改动时,可以查看哪个文件改了
git ls-files 查看暂存区内容

4.提交一个改动到本地仓库

git add .   将所有本地文件的改动都提交到暂存区, 
git commit -m "v1"  将暂存区的内容提交到本地仓库,并备注版本信息v1

git add 文件名 可以提交指定文件的改动
上述两条命令也可以用如下一条命令来代替

git commit -am "v1"

示例1

这里我使用一个空的远程仓库my_hone为例

进入仓库
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test
$ cd my_home/
创建一个包含Hello的hello.txt文件
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "Hello" > hello.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat hello.txt
Hello
将文件加入到暂存区
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git add .
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
将文件加入到本地仓库
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -m "v1"
[master (root-commit) b0675da] v11 file changed, 1 insertion(+)create mode 100644 hello.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$

示例2

我直接使用git commit -am

我再hello.txt中追加test
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "test" >> hello.txt
然后直接使用-am提交到暂存区和本地仓库
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -am "v2"
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
[master 8ddbdc7] v21 file changed, 1 insertion(+)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$

注意:这种写法只适合以及已跟踪文件(文件在使用git add加入暂存区就代表已经被跟踪)
如下,我新创建一个文件

我首先创建一个空文件test.txt
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ touch test.txt直接使用git -am 提示我test.txt文件未跟踪,必须先使用git add
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -am "v3"
On branch master
Your branch is based on 'origin/master', but the upstream is gone.(use "git branch --unset-upstream" to fixup)Untracked files:(use "git add <file>..." to include in what will be committed)test.txtnothing added to commit but untracked files present (use "git add" to track)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$

回退改动

5. git reset 命令

回退文件的改动
首先,我们需要用git log或者git reflog查看之前的提交记录,来判断我们要将回退到哪一次提交记录
git log 显示当前分支提交记录
git reflog 显示当前分支操作的所有历史记录,通常用于误删分支,撤销错误时候,恢复时使用

commit 8ddbdc7bc0981e66d1e3890e1200bdccbe34acf1 (HEAD -> master)
Author: Gabriel <2929310048@qq.com>
Date:   Sun Aug 17 14:06:52 2025 +0800v2commit b0675da20964da85f5fd2c82d99579781109ee1b
Author: Gabriel <2929310048@qq.com>
Date:   Sun Aug 17 14:01:32 2025 +0800v1Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git reflog
8ddbdc7 (HEAD -> master) HEAD@{0}: commit: v2
b0675da HEAD@{1}: commit (initial): v1Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$

git reset --soft

保留工作区,暂存区的修改的内容,相当于撤回一个git commit操作,但是工作区和暂存区还存在文件
我们将工作区(本地目录)和暂存区的改动不变,仅仅将本地仓库回退到134d35(一次提交记录的md5码)这一次提交记录上。
git reset --soft 134d35

示例1:将多次提交的记录合并为一次

比如我现在提交了三次代码,提交的功能都一样,我想把三次提交合并成一次,我就使用git reset --soft

1.我创建一个test.txt,并提交一次记录
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ touch test.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git add test.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -m "add test.txt file"
[master 75439de] add test.txt file1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 test.txt
显示当前提交的记录
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
75439de (HEAD -> master) add test.txt file
8ddbdc7 v2
b0675da v12.我往里写了一行内容,又提交一次代码
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "helllo test1" > test.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -am "write one line"
warning: in the working copy of 'test.txt', LF will be replaced by CRLF the next time Git touches it
[master 3d0149f] write one line1 file changed, 1 insertion(+)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
3d0149f (HEAD -> master) write one line
75439de add test.txt file
8ddbdc7 v2
b0675da v13.我又往里写了一行内容继续提交代码
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "hello world" >> test.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat test.txt
helllo test1
hello worldAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -am "add 2ed line"
warning: in the working copy of 'test.txt', LF will be replaced by CRLF the next time Git touches it
[master bfdb4e6] add 2ed line1 file changed, 1 insertion(+)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
bfdb4e6 (HEAD -> master) add 2ed line
3d0149f write one line
75439de add test.txt file
8ddbdc7 v2
b0675da v1

接着我们先撤销到8ddbdc7 v2版本提交后的状态

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
bfdb4e6 (HEAD -> master) add 2ed line
3d0149f write one line
75439de add test.txt file
8ddbdc7 v2
b0675da v1Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git reset --soft 8ddbdc7本地仓库已经回退到v2提交后的状态
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
8ddbdc7 (HEAD -> master) v2
b0675da v1本地目录下文件没有变化,test.txt还在,没有回退
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat test.txt
helllo test1
hello world我们发现暂存区文件也还在
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git ls-files
hello.txt
test.txt当前状态是我们已经add过test.txt这个记录,提示我们下一步提交记录
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.(use "git branch --unset-upstream" to fixup)Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   test.txt

现在我们本地仓库提交记录只有v1和v2两条记录,后面的提交操作都被撤销了,但是我们本地目录文件还在,改动也提交到暂存区了,就差commit了
接下来我们commit

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -m "add test.txt file and write 2 lines"
[master b2541ba] add test.txt file and write 2 lines1 file changed, 2 insertions(+)create mode 100644 test.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
b2541ba (HEAD -> master) add test.txt file and write 2 lines
8ddbdc7 v2
b0675da v1

ok了,原来三条提交记录现在就变成一条提交记录

git reset --hard

丢弃工作区,暂存区的修改的内容,回退到上一个版本
这条命令使用后,我们当前所有改动都不存在了,文件都变成上一次提交记录时候的状态。
git reset --hard HEAD^

示例二:放弃之前的修改

我们在工作区修改完,提交到暂存区,也提交到了本地仓库,我们发现我们改错了,我们直接从本地仓库直接使用上述回退,不管之前工作区,暂存区怎么改动,我们都可以回退到我们指定的提交记录当时的状态(工作区,暂存区改动都丢弃了)。
首先创建两条新的记录,我们直接将本地仓库恢复到v2节点提交后的状态,也就是当前HEAD节点向前的两个节点。

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "hello 123" >> test.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -am "update 123 in test.txt"
warning: in the working copy of 'test.txt', LF will be replaced by CRLF the next time Git touches it
[master 7260fe6] update 123 in test.txt1 file changed, 1 insertion(+)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ touch test2.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git add .Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -m "add test2.txt"
[master 0c1fb28] add test2.txt1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 test2.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
0c1fb28 (HEAD -> master) add test2.txt
7260fe6 update 123 in test.txt
b2541ba add test.txt file and write 2 lines
8ddbdc7 v2
b0675da v1Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$

我开始向前回退一个版本
HEAD^或者HEAD都是HEAD之前的一个节点的简写,同理前两个版本HEAD2

向前回退一个版本
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git reset --hard HEAD~
HEAD is now at 7260fe6 update 123 in test.txt
发现现在没有add test2.txt记录
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
7260fe6 (HEAD -> master) update 123 in test.txt
b2541ba add test.txt file and write 2 lines
8ddbdc7 v2
b0675da v1
继续向前回退一个版本
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git reset --hard HEAD^
HEAD is now at b2541ba add test.txt file and write 2 linesAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
b2541ba (HEAD -> master) add test.txt file and write 2 lines
8ddbdc7 v2
b0675da v1本地目录也回退了
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ ls
hello.txt  test.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat test.txt
helllo test1
hello world暂存区也回退了
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git ls-files
hello.txt
test.txt

git reset --mixed

只保留工作区修改的内容,丢弃暂存区的修改内容(默认不带参数的状态)
撤销commit和add操作,本地目录下文件不变,暂存区和本地仓库回退,
我们本地仓库和暂存区都恢复到上一次改动的状态,本地修改的内容还在,这时候我们可以继续修改然后使用git add重新提交到暂存区,再使用git commit提交到本地仓库
git reset --mixed HEAD^

示例三:重新提交改动

我们改动遗漏了,或者有一点小瑕疵,我们使用mixed,可以将本地仓库和暂存区回退,这样我们重新在工作区修改好,再git add和git commit提交到本地仓库上
我先创建一条记录

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "Hallo" >> work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git add .
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches itAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -m "add work.txt"
[master d46aa5d] add work.txt1 file changed, 1 insertion(+)create mode 100644 work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat work.txt
HalloAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
d46aa5d (HEAD -> master) add work.txt
8ddbdc7 v2

这时候我发现我Hello 我写成了Hallo,于是我将暂存区和本地仓库回退到上一个版本,本地目录我修改完再重新上传

git reset和git reset --mixed 效果一样
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git reset HEAD~本地仓库回退了
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
8ddbdc7 (HEAD -> master) v2
b0675da v1
暂存区也回退了
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git ls-files
hello.txt
本地目录文件还在
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ ls
hello.txt  work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat work.txt
Hallo
修改完并重新上传
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "Hello" > work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat work.txt
HelloAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git add .
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches itAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -m "add work.txt"
[master a3a2413] add work.txt1 file changed, 1 insertion(+)create mode 100644 work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
a3a2413 (HEAD -> master) add work.txt
8ddbdc7 v2
b0675da v1

git checkout 和git restore

现在git checkout命令已经被弃用,原来是可以切换分支和恢复文件,现在被git switch和git restore分别替代
首先我对本地仓库做一个修改

$ git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.(use "git branch --unset-upstream" to fixup)nothing to commit, working tree cleanAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "123" > work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat work.txt
123Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.(use "git branch --unset-upstream" to fixup)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:   work.txtno changes added to commit (use "git add" and/or "git commit -a")

我突然不想要这个改动,于是我想还原回去,用本地仓库覆盖本地目录

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git checkout .
Updated 1 path from the indexAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.(use "git branch --unset-upstream" to fixup)nothing to commit, working tree cleanAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat work.txt
Hello

现在改用git restore做文件恢复

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "123" >> work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat work.txt
Hello
123Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git restore .Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat work.txt
Hello

更多用法:
git restore . 文件恢复,将工作区的文件恢复到最近一次修改,主要针对某个文件的恢复
–stage 撤销一次git add的修改
–source=xxxxx 将这个文件恢复到xxx提交记录的状态
–stage --worktree 同时恢复工作区和暂存区

git diff

查看文件的差异
git diff 工作区与暂存区的差距
git diff HEAD 工作区与版本库的差异
git diff --cached 暂存区与版本库的差异
git diff 版本HASH1 版本HASH2 比较两个版本差异的内容

比较与head的差距
git diff 版本hash HEAD

比较当前版本和上一版本的差距,
HEAD~可以代表上一版本;HEAD^也可以代表上一版本
HEAD~2代表HEAD之前的两个版本
git diff HEAD~ HEAD

git diff HEAD~3 HEAD file3.txt
比较file3的 HEAD之前的第三个版本 和 HEAD差异

示例

对比本地目录和暂存区差别

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
nothing to commit, working tree cleanAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat work.txt
HelloAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "test" >> work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git diff
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches it
diff --git a/work.txt b/work.txt
index e965047..9d720a1 100644
--- a/work.txt
+++ b/work.txt
@@ -1 +1,2 @@Hello
+test
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "test" >> work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git diff
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches it
diff --git a/work.txt b/work.txt
index e965047..86adcbe 100644
--- a/work.txt
+++ b/work.txt
@@ -1 +1,3 @@Hello
+test
+test
这里--- a/work.txt代表修改前的文件,+++ b/work.txt代表修改后的文件
-1 从原来的第一行开始到最后
+1,3 现在第一行到第三行
新增了两个test
+test
+test对比工作区和版本库差距也一样
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git diff HEAD
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches it
diff --git a/work.txt b/work.txt
index e965047..86adcbe 100644
--- a/work.txt
+++ b/work.txt
@@ -1 +1,3 @@Hello
+test
+test
这个也一样因为暂存区与本地仓库没有改动所有没有任何变化
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git diff --cached现在当前版本与上一版本做比较
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
a3a2413 (HEAD -> master) add work.txt
8ddbdc7 v2
b0675da v1Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git diff HEAD~ HEAD
diff --git a/work.txt b/work.txt
new file mode 100644
index 0000000..e965047
--- /dev/null
+++ b/work.txt
@@ -0,0 +1 @@
+Hello
当前版本多了一个work.txt
并且多了一行HelloAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
a3a2413 (HEAD -> master) add work.txt
8ddbdc7 v2
b0675da v1Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git diff b0675da 8ddbdc7
diff --git a/hello.txt b/hello.txt
index e965047..9d720a1 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1,2 @@Hello
+test
两次提交作对比,v2比v1再hello.txt中多了一个test

git rm

删除文件
git rm直接从工作区,暂存区删除
git rm --cached 文件名 只从版本库里删除

示例:

如果我想彻底的删除git管理的一个文件,使用git rm
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ touch test1.txt test2.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git add .Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -m "add test1.txt test2.txt"
[master 89d7d3b] add test1.txt test2.txt2 files changed, 0 insertions(+), 0 deletions(-)create mode 100644 test1.txtcreate mode 100644 test2.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git rm test1.txt
rm 'test1.txt'Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ ls
hello.txt  test2.txt  work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git ls-files
hello.txt
test2.txt
work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$如果我仅仅不想让这个文件被git管理,我使用git rm --cached
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git rm --cached test2.txt
rm 'test2.txt'Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ ls
hello.txt  test2.txt  work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git ls-files
hello.txt
work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$

.gitignore

忽略文件,一般临时文件,编译过程中的文件,log文件我们不想上传到git仓库
可以在文件中填写下面内容
*.log
temp/
这样就可以忽略所有log文件名,忽略temp文件夹

如果我们已经把other.log加入add git中,.gitignore是不会对这个文件生效
我们必须先从版本库中先删除掉
git rm --cached other.log 只从版本库里删除,保留工作区(本地)的文件

git默认不会将空文件加入到版本库中

git status -s 查看工作区的状态
?? temp/ 第一个是暂存区,第二列表示工作区状态
M 表示文件被修改过

可以使用 * ? [abc]
!代表取反

*.a
!lib.a 不忽略lib.a
/TODO 只忽略当前目录下TODO,顶层目录

示例:

空文件不会被管理
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ mkdir testDirAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ ls
hello.txt  test1.txt  test2.txt  testDir/  work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
nothing to commit, working tree cleanAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat .gitignore
*.txt
!hello.txt
/testDir忽略所有*.txt,不忽略!hello.txt,忽略testDir下面的文件
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ touch 3.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
nothing to commit, working tree cleanAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "111" >> hello.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
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:   hello.txtno changes added to commit (use "git add" and/or "git commit -a")AdminisAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ touch testDir/1.logAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
nothing to commit, working tree cleanAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$

分支

git branch 查看所有的分支,带有*就是所在分支
git branch dev 创建新分支
git checkout dev 切换分支

git checkout -b dev 创建新分支并切换到当前分支
git checkout -b dev 244d35 可以恢复dev分支,回到244d35这次提交记录

git checkout 有两种功能:切换分支,恢复文件
但是,如果分支名和文件名相同就会有歧义
git switch 转门用来切换分支

git merge dev 合并分支,当前分支就是合并后的分支,dev就是被合并的分支
dev分支合并到main分支方法:

  1. 切换main分支
  2. git merge dev 合并dev分支
  3. 会自动产生一次提交,dev分支在合并后依然存在

git branch -d dev 删除已经完成合并的分支
git branch -D dev 强制删除分支

示例:

git默认会有一个master分支或者main分支作为主分支
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branch
* master
创建dev分支
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branch dev
再次查看分支
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branchdev
* master
使用checkout和Switch都可以切换分支
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git checkout dev
Switched to branch 'dev'Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git branch
* devmaster我们在dev分支下做一个新的提交,在hello.txt最后添加一行world
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ cat hello.txt
Hello
testAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ echo "world" >> hello.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git commit -am "modify hello.txt"
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
[dev bbf61ba] modify hello.txt1 file changed, 1 insertion(+)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git switch master
Switched to branch 'master'Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branchdev
* master

我们开始将dev分支的改动合并到master中


Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git branch
* devmasterAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ cat hello.txt
Hello
test
worldAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git switch master
Switched to branch 'master'Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat hello.txt
Hello
testAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git merge dev
Updating 1b18c22..bbf61ba
Fast-forwardhello.txt | 1 +1 file changed, 1 insertion(+)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat hello.txt
Hello
test
world
这时候master也修改了hello.txt这一行,和dev分支在同一个提交节点上
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
bbf61ba (HEAD -> master, dev) modify hello.txt
1b18c22 add ignore
89d7d3b add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1  
删除dev分支
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branch -d dev
Deleted branch dev (was bbf61ba).Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branch
* master

合并分支解决冲突

两个分支修改了同一个文件的同一行代码,合并的时候就会有冲突
git merge feat

  • 手动继续合并
    git status 查看冲突信息
    git diff 查看冲突内容,左箭头表示当前分支的内容,右箭头表示被合并分支的内容
    然后我们找到冲突的文件,比如main1.txt,手动合并内容
    接着重新提交
    git commit -am “merge conflict”
    就会自动完成合并

  • 中断合并
    git merge --abort
    git merge --quit

示例:
创建一个dev分支,并且修改hello.txt,提交一次commit

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branch devAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git switch dev
Switched to branch 'dev'Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ echo "dev test" > hello.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ cat hello.txt
dev testAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git log --oneline
f9c38d0 (HEAD -> dev) dev modify hello.txt
bbf61ba modify hello.txt
1b18c22 add ignore
89d7d3b add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1

切换到master分支,修改hello.txt并提交一次commit

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git switch master
Switched to branch 'master'Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "master test" > hello.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ cat hello.txt
master testAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -am "master modify hello.txt"
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
[master 8f9b4ea] master modify hello.txt1 file changed, 1 insertion(+), 3 deletions(-)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
8f9b4ea (HEAD -> master) master modify hello.txt
bbf61ba modify hello.txt
1b18c22 add ignore
89d7d3b add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1

这时候两个分支的已经在最后一次提交有分叉,合并必定会有冲突

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git merge dev
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
提示我们有冲突,在hello.txt文件
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master|MERGING)
$ git status
On branch master
You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified:   hello.txtno changes added to commit (use "git add" and/or "git commit -a")
对比两个分支,发现当前分支的hello.txt第一行是master test,dev分支的hello.txt第一行是dev test
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master|MERGING)
$ git diff
diff --cc hello.txt
index 091455c,0be2612..0000000
--- a/hello.txt
+++ b/hello.txt
@@@ -1,1 -1,1 +1,5 @@@
++<<<<<<< HEAD+master test
++=======
+ dev test
++>>>>>>> dev   

放弃合并,就当无事发生

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master|MERGING)
$ git merge --abortAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git status
On branch master
nothing to commit, working tree cleanAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
8f9b4ea (HEAD -> master) master modify hello.txt
bbf61ba modify hello.txt
1b18c22 add ignore
89d7d3b add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1

或者修改冲突继续合并

我们打开hello.txt文件,这里发现已经给我们指出冲突的地方,
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master|MERGING)
$ vim hello.txt
<<<<<<< HEAD
master test
=======
dev test
>>>>>>> dev
我们修改冲突的地方,我们改完后再重新提交代码
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master|MERGING)
$ cat hello.txt
master test
dev test
好了,已经合并完成,并且我们多了一个提交记录
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
6e768d8 (HEAD -> master) merge config code
8f9b4ea master modify hello.txt
f9c38d0 (dev) dev modify hello.txt
bbf61ba modify hello.txt
1b18c22 add ignore
89d7d3b add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1

rebase变基

也能合并分支
git switch main
git merge dev
而换种方式如下
git switch dev
git rebase main
这样dev分支就会变基到main分支的末尾,从两个分支不同的地方开始,dev分支提交的部分全部移动到main后面

git中,每个分支都有一个HEAD指针,指向当前分支的最新提交记录
上述过程如下

  1. 找到main分支和dev分支的共同祖先
  2. 将dev分支不同的提交部分全部原封不动的移动到main分支的后面

git log --online --graph --decorate --all
查看图形化的提交记录

示例:
创建一个dev分支并提交几次记录

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branch
* masterAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
89d7d3b (HEAD -> master) add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git branch dev我们在main分支提交两次记录
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "test1" >> hello.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -am "main1"
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
[master 0d7f1e6] main11 file changed, 1 insertion(+)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ echo "test2" >> hello.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git commit -am "main2"
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
[master 5749302] main21 file changed, 1 insertion(+)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git log --oneline
5749302 (HEAD -> master) main2
0d7f1e6 main1
89d7d3b (dev) add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (master)
$ git switch dev
Switched to branch 'dev'Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git branch
* devmaster我们在dev分支也提交几次记录
Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ echo "dev test1" > work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git commit -am "dev1"
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches it
[dev 4f04fc1] dev11 file changed, 1 insertion(+), 1 deletion(-)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ echo "dev test2" > work.txtAdministrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git commit -am "dev2"
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches it
[dev 3b267b3] dev21 file changed, 1 insertion(+), 1 deletion(-)Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git log --oneline
3b267b3 (HEAD -> dev) dev2
4f04fc1 dev1
89d7d3b add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1

在dev分支执行变基,就相当于保留main和dev相同的部分,把dev差异的地方放在最后面
相同部分提交记录+main部分修改提交记录+dev部分修改提交记录

Administrator@DESKTOP-QRFKG91 MINGW64 /d/git_test/my_home (dev)
$ git log --oneline
e442235 (HEAD -> dev) dev2
795e569 dev1
5749302 (master) main2
0d7f1e6 main1
89d7d3b add test1.txt test2.txt
a3a2413 add work.txt
8ddbdc7 v2
b0675da v1

这里,我使用sourcetree来展示变基前后分支的变化
变基前
变基前分支状态
变基后
变基后分支状态

rebase和merge区别

merge不会破坏原分支的记录,方便回溯和查看,缺点是产生额外的提交节点,分支图比较复杂
rebase不需要新增额外的提交记录,形成线形历史记录,比较直观和干净;但是会改变历史记录,改变当前分支的branch out节点
rebase避免在共享分支使用,一般不会在公共的分支上使用

如果只在一个分支上开发,建议使用rebase命令;如果使用公共分支,使用merge

工作流模型

git flow模型
main :基线分支,部署生产环境,不允许直接修改,只能通过合并修改,每次修改简历一个版本号
git tag命令创建版本号,主版本.次版本.改进版本
hotfix: 问题修复分支,用于修复线上问题,修复完成后,合并主分支,然后删除这个分支
develop: 开发分支,用于开发和测试,
feature: 功能分支,包含某个项目新功能的代码,功能完成后合并主分支 例如:feature-login-page
release: 版本发布分支,预发布分支,用于测试和验证,一般从开发分支中分离出来的,完成后会合并到主分支和开发分支中,然后将其删除

主要分支:主分支和开发分支
辅助分支:修复分支,功能分支,版本发布分支

github flow模型
主分支,禁止团队成员直接在主分支上进行提交
一般从主分支分离自己的分支进行开发和测试,等开发和测试完成后,在本地提交代码,pull request简称PR(拉请求,合并请求),
团队成员可以进行评审,没有问题就可以合并(MR)

http://www.dtcms.com/a/342192.html

相关文章:

  • 拂去尘埃,静待花开:科技之笔,勾勒城市新生
  • Linux基础(1) Linux基本指令(二)
  • 大模型推理并行
  • 机器学习7
  • 以往内容梳理--HRD与MRD
  • 《深入探索 Java IO 流进阶:缓冲流、转换流、序列化与工具类引言》
  • 事件驱动流程链——EPC
  • Metrics1:Intersection over union交并比
  • tail -f与less的区别
  • Python Excel 通用筛选函数
  • 【C++】模板(进阶)
  • Rancher 管理的 K8S 集群中部署常见应用(MySQL、Redis、RabbitMQ)并支持扩缩容的操作
  • ubuntu编译ijkplayer版本k0.8.8(ffmpeg4.0)
  • Spring Boot整合Amazon SNS实战:邮件订阅通知系统开发
  • 将windows 的路径挂载到Ubuntu上进行直接访问
  • C++---辗转相除法
  • VB.NET发送邮件给OUTLOOK.COM的用户,用OUTLOOK.COM邮箱账号登录给别人发邮件
  • Azure的迁移专业服务是怎么提供的
  • 带有 Angular V14 的 Highcharts
  • Transformer在文本、图像和点云数据中的应用——经典工作梳理
  • 【解决方案系列】大规模三维城市场景Web端展示方案
  • C++STL-stack和queue的使用及底层实现
  • 阿里云搭建flask服务器
  • 2021年ASOC SCI2区TOP,改进遗传算法+自主无人机目标覆盖路径规划,深度解析+性能实测
  • Java 16 新特性及具体应用
  • Redis 奇葩问题
  • Python break/continue
  • 嵌入式C语言和数据结构面试题
  • 2025-08-21 Python进阶3——模块
  • 信创自主可控新标杆:RustFS如何用内存安全架构重构数据主权防线?