0


【GIT学习笔记】第一章:总结

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

文章目录


前言

前面因为工作需要,所以去廖雪峰老师网站上学习了 git,老师的 git 教程虽然讲的很细很生动,但是后面实际使用的时候感觉有些不太好找知识点,不太方便。
这几天得空,打算把 git 的东西都复习一下,所以想着把里面的知识都整理好,为再之后使用复习提供方便。
这次主要整理出的是三个方面,一个是对所有关键字的整理,另一个是常用操作的记录,还有就是后面再加一个对一些常用问题的记录。这些我打算先在一个文章里写了,后面有需要要调一下格式。

千淘万漉虽辛苦,吹尽狂沙始到金。

以上。


一、关键字

git 有许多关键字,这里按照常用性选取一些分类码下:

1.账户与创建库

1.1 git config 作用:配置变量

语法

更改信息

git config user.name <name>:更改用户名
git config user.email <email>:更改邮箱

查看当前信息

git config --list:查看当前信息
git config --list --show-origin:查看配置及其文件位置

作用域

git config --system:
更改系统内所有用户的信息,存储在 /etc/gitconfig 中。
git config --global:
只修改当前用户,存储在 ~/.gitconfig 或 ~/.config/git/config 中。
git config --local:
只修改当前仓库,存储在仓库的git目录中的config文件(即 .git/config)。

使用举例

e.g. git config --global user.name “Uss-Bailey”
— 修改当前用户的名字为“Uss-Bailey”
e.g. git config --list
— 查看当前信息

1.2 git init 作用:初始化仓库

语法

git init <directory>:
指定位置初始化一个仓库。
默认为当前目录。

使用举例

mkdir repo
cd repo
git init

nitialized empty Git repository in D:/repo/.git/
— 创建了一个叫 repo 的仓库

1.3 git clone 作用:克隆远程仓库

语法

git clone <repo>:
克隆⼀个指定 repo 到本地。
repo 可以是本地⽂件,也可以是远程路径。

使用举例

e.g. git clone git clone git@gitee.com:Uss-Bailey/git-learn.git
— 克隆了一个叫 git-learn 的远程仓库
e.g. git clone git clone /d/repo
— 克隆了一个叫 repo 的本地仓库

2.提交与修改

2.1 git add 作用:向暂存区添加文件

语法

git add [file1] [file2] …
git add [dir]
git add .
向缓存区添加单个文件/目录/全部文件

使用举例

e.g. git add hello.py
— 添加了一个叫 hello.py 的文件到暂存区

2.2 git commit 作用:将暂存区内容添加到仓库

语法

git commit -m [message]:
将暂存区的文件提交,[message] 是备注信息。
git commit -a:
-a 参数可以不要 git add 直接提交

使用举例

e.g. git commit -m “第一次提交”:
— 暂存区添加到了仓库并备注
e.g. git commit -a hello.py -m “第一次提交”:
— 直接添加了一个叫 hello.py 的文件到仓库并备注

2.3 git status 作用:查看仓库状态

语法

git status:
命令会显示以下信息
— 当前分支的名称。
— 当前分支与远程分支的关系(是否是最新的)。
— 未暂存修改:显示已修改但尚未使用 git add 添加到暂存区的文件列表。
— 未跟踪文件:显示尚未纳入版本控制的新文件列表。
git status -s:
-s 参数可以显示简略信息

使用举例

e.g. git status

On branch master
Your branch is up to date with ‘origin/master’.
nothing to commit, working tree clean
— 读取状态

2.4 git diff 作用:比较文件在暂存区和工作区的不同

语法

基本语法

git diff:尚未缓存的改动
git diff --cached:查看已缓存的改动
git diff HEAD:查看已缓存的与未缓存的所有改动
git diff --stat:显示摘要而非整个 diff

显示暂存区和工作区的差异

git diff [file]

显示暂存区和上一次提交(commit)的差异

git diff --cached [file]

git diff --staged [file]

显示两次提交之间的差异

git diff [first-branch]…[second-branch]

使用举例

e.g. git diff

2.5 git reset 作用:版本回退

语法

git reset [–soft | --mixed | --hard] [HEAD]:
用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git reset --soft HEAD:
–soft 参数用于回退到某个版本:

常用 reset 命令

git reset:
移除所有暂存区的修改,但不会修改⼯作区
git reset --head:
移除所有暂存区的修改,并强制删除所有⼯作区的修改
git reset <commit>:
将当前分⽀回滚到指定 commit,清除暂存区的修改,但保持⼯作区状态不变。
git reset --head <commit>:
将当前分⽀回滚到指定 commit,清除暂存区的修改,并强制删除所有⼯作区的修改

使用举例

e.g. git reset --soft HEAD~3
— 回退上上上一个版本

2.6 git restore 作用:恢复或撤销文件的更改

语法

如果还未使用 git add 提交

git restore <file>:
可以将指定文件 <file> 恢复到最新的提交状态,丢弃所有未提交的更改。

如果已经使用 git add 提交到暂存区

git restore --staged <file>:
将文件 <file> 恢复到暂存区的状态,但不影响工作目录中的文件。

还原全部更改

注意:该命令会清除所有未提交的修改

git restore .:
还原所有未提交的更改,包括工作目录和暂存区的更改

还原文件到指定提交的状态

git restore --source=<commit><file>:
将文件 <file> 恢复到特定提交 <commit> 的状态

交互式更改

git restore -i:
交互式更改

使用举例

e.g. git restore hello.c
— hello.c 到未修改的状态

3.分支操作

3.1 git checkout 作用:切换/创建分支、恢复文件

注意:git checkout 命令在 Git 2.23 版本后引入了 git switch 和 git restore 命令,分别用于分支切换和文件恢复,以提供更清晰的语义和错误检查。如果你使用较新的 Git 版本,可以考虑使用这些命令代替 git checkout。
语法

切换分支

git checkout <branch-name>:
切换为<branch-name>分支

创建并切换分支

git checkout -b :
创建一个新分支 <new-branch-name> 并立即切换到新创建的分支:

切换到前一个分支

git checkout -

检出文件

git checkout – <file>:
将指定文件 <file> 恢复到最新的提交状态,丢弃所有未提交的更改,这对于撤销不需要的更改非常有用

切换到特定提交

通常情况下,不建议在分离头指针状态下工作,因为更改可能会丢失。

git checkout <commit-hash>:
使用提交的哈希值 <commit-hash> 来切换到特定的提交状态。这将使你进入"分离头指针"状态,只能查看历史记录,而不能进行分支操作。

切换到标签

git checkout tags/<tag-name>:
如果你有一个标签 <tag-name>,你可以使用这个命令来切换到该标签所指向的提交状态。

使用举例

e.g. git checkout -b dev
— 创建并切换到 dev 分支
e.g. git checkout hello.c
— 把 hello.c 恢复到最新的提交状态

3.2 git branch 作用:查看/创建/删除分支

语法

查看本地分支

git branch:
不加参数时,表示查看本地分支

创建新的分支

git branch <new-branch-name>:
创建一个新分支 <new-branch-name>

删除分支

git branch -d <branch-name>
删除<branch-name>分支

使用举例

e.g. git branch

  • dev
    main
    — 查看本地分支
    e.g. git branch dev
    — 创建 dev 分支
    e.g. git branch -d dev
    Deleted branch hello (was c7bbc5e).
    — 删除 dev 分支,会给出删除信息

3.3 git switch 作用:切换分支

语法

切换分支

git switch <branch-name>:
切换到 <branch-name> 分支

创建并切换分支

git switch -c <new-branch-name>:
创建并切换到 <new-branch-name> 分支

切换到上一个分支

git switch -:
切换到上一个操作的分支

切换到标签

git switch tags/<tag-name>:
切换到<tag-name>标签,你可以使用这个命令来切换到该标签所指向的提交状态

使用举例

e.g. git switch -c dev
— 创建并切换到 dev 分支
e.g. git switch master
— 切换到 master 分支

3.4 git merge 作用:合并分支

注意:merge 和 rebase 的区别需要额外了解
语法

合并分支到当前分支

git merge <branch>:
合并 <branch> 分支到当前分支

使用举例

e.g. git merge dev
— 合并 dev 分支到当前分支

3.5 git rebase 作用:变基

注意:merge 和 rebase 的区别需要额外了解

rebase 的效果看似和 merge 相似,实际上它是一种集合的提交,merge的提交会保留分支合并的记录,但是 rebase 并不会,后面在会单独记录一下两者的区别。

4.标签

4.1 git tag 作用:标签相关操作

语法

列出所有标签

git tag:
将所有标签列出

给当前分支添加标签

git tag <name>:
给当前分支添加 <name> 标签

给某次 commit 添加标签

git tag <name> <commit id>:
给 <commit id> 提交 添加 <name> 标签

创建带有说明的标签

git tag -a <name> -m <message> <commit id>:
给 <commit id> 提交 添加 <name> 标签 并带有说明信息 <message>
用-a指定标签名,-m指定说明文字

删除标签

git tag -d <name>:
删除 <name> 标签

使用举例

e.g. git tag

v0.9
v1.0
— 查看标签列表
e.g. git tag v1.0:
— 给当前分支添加 v1.0 标签
e.g. git tag -a v0.1 -m “version 0.1 released” 1094adb
— 创建有说明的标签,可以使用 git show <tagname> 可以看到说明文字。

5.信息查看

5.1 git log

语法

使用 git log 命令列出历史提交记录

git log:
以缺省格式显示全部commit历史

--oneline 显示简洁提示

git log --oneline:
–oneline 选项来查看历史记录的简洁的版本。

--graph 显示分支历史

git log --graph:
–graph 选项,查看历史中什么时候出现了分支、合并

限制log的显示数量

git log -<limit>:
限制log的显示数量为-<limit>

其他:
-p:显示提交的补丁(具体更改内容)。
–decorate:显示分支和标签指向的提交。
–author=<作者>:只显示特定作者的提交。
–since=<时间>:只显示指定时间之后的提交。
–until=<时间>:只显示指定时间之前的提交。
–grep=<模式>:只显示包含指定模式的提交消息。
–no-merges:不显示合并提交。
–stat:显示简略统计信息,包括修改的文件和行数。
–abbrev-commit:使用短提交哈希值。
–pretty=<格式>:使用自定义的提交信息显示格式。

5.2 git show

语法

一般语法

git show [] […]
命令用于显示各种类型的对象
— 对于提交,它显示日志消息和文本差异。 它还以git diff-tree --cc生成的特殊格式呈现合并的提交。
— 对于标签,它显示标签消息和引用对象。
— 对于树,它显示的名称(相当于使用git ls-tree和–name-only选项)。
— 对于简单的blobs,它显示了普通的内容。

5.3 git blame

6.远程库通信

6.1 git remote 作用:远程库操作

语法

git remote:列出当前仓库中已配置的远程仓库。
git remote -v:列出当前仓库中已配置的远程仓库,并显示它们的 URL。
git remote add <remote_name> <remote_url>:添加一个新的远程仓库。指定一个远程仓库的名称和 URL,将其添加到当前仓库中。
git remote rename <old_name> <new_name>:将已配置的远程仓库重命名。
git remote remove <remote_name>:从当前仓库中删除指定的远程仓库。
git remote set-url <remote_name> <new_url>:修改指定远程仓库的 URL。
git remote show <remote_name>:显示指定远程仓库的详细信息,包括 URL 和跟踪分支。

6.2 git pull 作用:下载远程代码并合并

语法

git pull <远程主机名> <远程分支名>:<本地分支名>

6.3 git push 作用:上传远程代码并合并

语法

上传远程代码并合并

git push <远程主机名> <本地分支名>:<远程分支名>

如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:

git push --force origin master

删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:

git push origin --delete master

二、库的创建流程

1.本地库的提交

step 1:创建本地库

git init
— 创建本地库

step 2:添加文件到暂存区

git add
— 将文件添加到暂存区
— 可以多次添加
— 未 commit 之前所有提交只会算一个 commit

step 3:提交版本

git commit
— 将暂存区的文件提交到仓库中
— 可以使用 -m “message” 参数为本次提交添加说明

step 4:删除文件

git rm
— 从版本库删除某个文件
— 可以用 git checkout – <file> 恢复

2.本地库的回溯

branch 1 文件在工作区

git checkout – <file>
— 将工作区的文件恢复到上次提交前的状态
— --代表是撤回操作,必须加

branch 2 文件在暂存区

git reset HEAD <file>
— 可以把暂存区的修改撤销掉,返回工作区

branch 3 文件已经提交

git reset -head HEAD^
— 可以回退到某个特定版本:git log 查询 ID,git reset -head <commit id>

3.链接远程库

branch 1 链接远程库

step 1 创建 ssh 链接

ssh-keygen -t rsa -C “youremail@example.com
— 创建SSH Key

step 2 github 创建仓库

登陆GitHub,然后,在右上角找到“Create a new repo”按钮

step 3 链接远程仓库

git remote add origin git@github.com:<ssh 链接>
— 关联远程库,远程库的名字是origin,这是Git默认的,也可以改成别的

branch 2 删除与远程库的链接

step 1 查看现在远程库的链接列表

git remote -v
— 查看远程库信息

step 2 删除远程库的链接

git remote rm origin
— 解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动
— origin 是远程库的名字

4.分支的操作

branch 1 创建分支

type 1 使用 git checkout

git checkout -b dev
— 使用 checkout 创建分支

type 2 使用 git switch

git switch -c dev
— 使用 checkout 创建分支

type 3 使用 git branch

git branch dev
使用 git branch 创建分支

branch 2 切换分支

type 1 使用 git switch 切换分支

git switch master
— 切换到主分支

type 2 使用 git checkout 切换分支

git checkout master
— 切换到主分支

branch 3 合并分支

type 1 快速合并(默认合并) git merge

git merge dev

Updating d46f35e…b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
— 合并指定分支到当前分支

type 2 非快速合并 --no-ff

git merge --no-ff -m “merge with no-ff” dev

Merge made by the ‘recursive’ strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
— 不使用Fast forward模式

--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
type 3 冲突分支
step 1 冲突原因

分支合并时两个分支都有改变,会产生冲突,必须首先解决冲突。解决冲突后,再提交合并。

step 2 冲突解决

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

合并时会出现:
git merge dev

Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
打开冲突的文件,保存重新提交,冲突解决.
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。

step 3 其他

用git log --graph命令可以看到分支合并图。

branch 4 删除分支

step 1 删除分支

git branch -d dev
— 删除某个分支
— 合并后可以删除某个分支

branch 5 保存现场

step 1 保存现场

git stash

Saved working directory and index state WIP on dev: f52c633 add merge
— 可以把当前工作现场保存起来,等以后恢复现场后继续工作

step 2 保存的现场
查看

git stash list

stash@{0}: WIP on dev: f52c633 add merge
— 可以查看之前保存的现场

删除

git stash drop
— 删除 stash 里保存的现场

step 3 返回现场
type 1 不删除 stash 里的记录 git stash apply

git stash apply
— 恢复保存的现场但不记录

type 2 删除 stash 里的记录 git stash pop

git stash pop
— 恢复保存的现场并去除记录

branch 6 复制提交到另一个分支

git cherry-pick 4c805e2
— 复制一个特定的提交到当前分支

branch 7 丢弃未被合并过的分支

git branch -D dev

Deleted branch feature-vulcan (was 287773e)
— 未合并的分支使用 -D 参数,使用 -d 会:
error: The branch ‘feature-vulcan’ is not fully merged.
If you are sure you want to delete it, run ‘git branch -D feature-vulcan’.

branch 7 rebash

rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

5.标签的操作

branch 1 创建标签

type 1 给分支打标签

git tag v1.0
— 给当前分支打标签

type 2 给 commit 打标签

git tag v0.9 f52c633
— 给某个分支打标签

type 3 给标签添加信息

git tag -a <tagname> -m “message”
— 给标签添加信息

branch 2 删除标签

git tag -d <tagname>
— 删除本地标签

branch 3 查看标签

type 1 查看简略信息

git tag
— 查看所有标签

type 2 查看标签备注信息

git show
— 查看标签备注信息

branch 4 远程操作标签

type 1 推送一个标签

git push origin <tagname>
— 推送一个标签给远程库

type 2 推送所有未推送标签

git push origin --tags
— 推送所有未推送标签

type 3 删除远程库的标签

git push origin :refs/tags/<tagname>
— 删除远程库的标签

6.有关远程库的操作

branch 1 推送内容

step 1 推送内容

git push -u origin master
— 把本地库的所有内容推送到远程库
— -u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
— 之后的提交不需要 -u 参数

branch 2 获取最近推送

step 1 获取最新的推送

git pull
— 从远程获取代码并合并本地的版本

总结

标签: git 学习

本文转载自: https://blog.csdn.net/m0_52060650/article/details/135220967
版权归原作者 贝利是兔兔 所有, 如有侵权,请联系我们删除。

“【GIT学习笔记】第一章:总结”的评论:

还没有评论