什么是Git?
Git是一个开源的分布式版本控制系统,它可以追踪文件的所有历史变化,并能够在不同的开发者之间进行协作开发,从而使软件开发变得更加高效和可靠。Git最初由Linus Torvalds为了管理Linux内核代码而创建,现在已成为全球范围内最流行的版本控制系统之一。使用Git,开发者可以轻松地保存、共享、更新和恢复他们的代码,也可以快速处理分支和合并,以便在不同的开发阶段中快速迭代和实验新功能。
如何安装Git?
官网下载安装包: Git - Downloads (git-scm.com)
Ubuntu一键安装:
apt install git -y
初始化全局配置
# 1.设置用户名 如果名字有空格用 " " 2.设置用户邮箱 3.保存设置
git config --global user.name mek
git config --global user.email [email protected]
git config --global credential.helper store
# 查看已配置的信息
root@eaidk:~/Repo# git config --list
user.name=mek
[email protected]
credential.helper=store
创建仓库
本地创建仓库
# 创建一个名为 my-repo 的仓库
git init my-repo
# 将本地目录创建为仓库
git init
# 仓库目录下有 '.git' 则表示创建成功
root@eaidk:~/Repo/my-repo# ls -a
. .. .git
获取远程仓库
# git clone "仓库地址"
root@eaidk:~/Repo# git clone https://gitee.com/oschina/tide.git
Cloning into 'tide'...
remote: Enumerating objects: 8774, done.
remote: Counting objects: 100% (3835/3835), done.
remote: Compressing objects: 100% (2404/2404), done.
remote: Total 8774 (delta 2748), reused 1731 (delta 1371), pack-reused 4939
Receiving objects: 100% (8774/8774), 6.84 MiB | 1.11 MiB/s, done.
Resolving deltas: 100% (6099/6099), done.
root@eaidk:~/Repo# ls
tide
查看仓库状态
# 通过git status 查看仓库状态
root@eaidk:~/Repo/tide# git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: mek_mulod.py
# 红色 为没有被管理的文件
# 绿色 已添加到暂存区的文件
管理仓库文件
学习如何使用git管理文件之前先理解git的几个工作区域
- 工作区: 仓库目录即是工作区
- 暂存区: 再仓库目录通过 add 命令把文件提交到暂存区
- 仓库: 将暂存区的文件通过 commit 命令把文件提交到仓库
添加文件到暂存区
# 添加所以文件到暂存区
git add .
# 添加单个文件到暂存区
git add myfile.c
# 从暂存区删除某文件
root@eaidk:~/Repo/tide# git rm --cached mek_2.py
rm 'mek_2.py'
# 撤销add命令
git restore --staged <file>
提交文件到仓库
# git commit 提交暂存区文件到仓库 -m "提交信息"
root@eaidk:~/Repo/tide# git commit -m "mek_2.py"
[main 8d38f7b] mek_2.py
1 file changed, 1 insertion(+)
create mode 100644 mek_2.py
# git commit -am "提交信息" 提交所以已修改文件到仓库
root@eaidk:~/Repo/tide# git commit -am "all"
分支管理
# 列出所有分支
root@eaidk:~/Repo/tide# git branch
* main
# 创建新分支
root@eaidk:~/Repo/tide# git branch new_branch
# 切换到新分支
git checkout new_branch
# 创建新分支并切换
git checkout -b new_branch
合并分支
在 Git 中,合并分支可以使用 git merge
命令完成。下面是一些简要的步骤:
-
切换到你想要将更改合并到的目标分支
在命令行中使用
git checkout
命令切换到目标分支,例如:git checkout main
-
合并分支
使用
git merge
命令将分支中的更改合并到当前分支,例如:git merge feature-branch
这将会将名为
feature-branch
的分支合并到当前所在的分支中。 -
解决冲突
使用–allow-unrelated-histories强行合并
git merge feature-branch --allow-unrelated-histories
如果发生了冲突(例如两个分支都修改了同一个文件),需要手动解决冲突。Git 会自动在冲突文件中标记出差异,让你进行选择。
-
提交更改
解决完冲突后,使用
git add
命令来将修改添加到暂存区,然后使用git commit
命令提交更改,例如:git add . git commit -m "merge changes from feature-branch"
-
推送更改
最后,使用
git push
将更改推送到远程仓库中,例如:git push origin main # origin 远程仓库地址 # main 分支
这将会将本地分支
main
推送到名为origin
的远程仓库中。
删除合并
如果你想要删除一个已经合并的分支,可以使用 git branch
命令加上 -d
选项来删除它。例如:
git branch -d branch-name
其中,branch-name
是你想要删除的分支名称。注意,只有当分支已经被合并到其他分支中时才能够被安全地删除。如果分支包含未合并的更改,Git 将会拒绝删除该分支。
如果你想要强制删除分支(即使它包含未合并的更改),可以使用 -D
选项。例如:
git branch -D branch-name
在任何情况下,删除分支之前请确保你已经备份了所有需要的代码,并且已经将其保存到了一个安全的位置。
版本回滚
# 查看所有提交记录
git log
在 Git 中,回滚(Rollback)是指撤销之前的提交操作。可以使用 git revert
或 git reset
命令来回滚。
-
使用 git revert 回滚
git revert
命令用于撤销某个提交,并在历史记录中创建一个新的提交以表示这个撤销操作。例如:git revert HEAD <hash> # hash 版本哈希值
这将会撤销最近一次提交,并创建一个新的提交来表示这个撤销操作。如果你想要撤销之前的某个提交,可以使用该提交的 SHA-1 校验和代替
HEAD
。 -
使用 git reset 回滚
git reset
命令用于将当前分支的头部指针移动到另一个位置。它可以用于回滚到过去的某个提交,并删除后续的提交记录。有三种模式可供选择:- –soft:只重置 HEAD 指针,不修改索引和工作目录。
- –mixed(默认):重置 HEAD 指针和索引,但不修改工作目录。这个选项常被用来取消暂存的更改。
- –hard:重置 HEAD 指针、索引和工作目录,所有未提交的更改都将被丢弃。这个选项极其危险,慎用。
例如,如果你想要回滚到过去的某个提交并删除后续的提交记录,可以使用以下命令:
git reset --hard <commit-SHA> # commit-SHA 版本哈希值
其中,
<commit-SHA>
是你想要回滚到的提交的 SHA-1 校验和。请注意,在使用git reset --hard
命令时,所有未提交的更改都将被永久丢弃,请确保你在操作之前已经备份了重要的代码。
3.checkout
git checkout 3c970cbe33c25db4da96de9a83983be8c9e1af34 .
# 3c970cbe33c25db4da96de9a83983be8c9e1af34 版本哈希
# . 文件名 . 为全部
该方法只替换文件,保留提交记录
无论你使用哪种回滚方法,请牢记 Git 的本质:它是一种分布式版本控制系统,你不应该轻易地修改或删除历史记录。如果你不小心回滚了一个提交,请考虑使用 git reflog
命令来查找被删除的提交,并尝试恢复它。
配置远程仓库
git remote add origin http://10.1.1.16/mek/mysys.git
# 使用 remote add 添加远程仓库
# origin 为仓库名 可任意
# http://10.1.1.16/mek/mysys.git 仓库地址
# git remote -v 查看远程仓库信息
localhost:~/mysys# git remote -v
origin http://10.1.1.16/mek/mysys.git (fetch) # pull
origin http://10.1.1.16/mek/mysys.git (push) # push
## 推送和拉取
git push origin master
# origin 仓库名称
# master 分支
拉取远程分支
git fetch origin 远程分支名:本地分支名
git switch 本地分支名
git pull 远程仓库 分支名