什么是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 命令完成。下面是一些简要的步骤:

  1. 切换到你想要将更改合并到的目标分支

    在命令行中使用 git checkout 命令切换到目标分支,例如:

    git checkout main
    
  2. 合并分支

    使用 git merge 命令将分支中的更改合并到当前分支,例如:

    git merge feature-branch
    

    这将会将名为 feature-branch 的分支合并到当前所在的分支中。

  3. 解决冲突
    使用–allow-unrelated-histories强行合并

   git merge feature-branch --allow-unrelated-histories

如果发生了冲突(例如两个分支都修改了同一个文件),需要手动解决冲突。Git 会自动在冲突文件中标记出差异,让你进行选择。

  1. 提交更改

    解决完冲突后,使用 git add 命令来将修改添加到暂存区,然后使用 git commit 命令提交更改,例如:

    git add .
    git commit -m "merge changes from feature-branch"
    
  2. 推送更改

    最后,使用 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 revertgit reset 命令来回滚。

  1. 使用 git revert 回滚

    git revert 命令用于撤销某个提交,并在历史记录中创建一个新的提交以表示这个撤销操作。例如:

    git revert HEAD <hash>
    # hash		版本哈希值
    

    这将会撤销最近一次提交,并创建一个新的提交来表示这个撤销操作。如果你想要撤销之前的某个提交,可以使用该提交的 SHA-1 校验和代替 HEAD

  2. 使用 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 远程仓库 分支名