Git学习记录

发布于 2024-05-31  4 次阅读


Git介绍

Git是一个用于跟踪和管理源代码历史记录的工具,它允许开发者在不同时间点保存文件的版本,并且可以轻松地回溯到任何之前的版本。它支持多人协作,可以让团队成员在自己的电脑上工作,同时保持与中央代码库的同步。Git的主要功能包括版本控制、分支管理、合并和冲突解决等,它使得代码管理和团队协作更加高效和可靠。

  1. Workspace(工作区)
    • 这是您实际编辑文件的地方,即您电脑上的文件夹。在这里,您可以添加、删除、修改和提交更改。
    • 当您对文件进行更改时,这些更改首先在工作区中可见。
  2. Index / Stage(暂存区)
    • 暂存区是工作区和仓库区之间的缓冲区。它用于暂存您想要提交的更改。
    • 使用git add命令,您可以将工作区的更改添加到暂存区。这允许您精细控制哪些更改被包含在下一个提交中。
  3. Repository(仓库区/本地仓库)
    • 本地仓库是您电脑上的一个目录,它包含了项目的完整历史记录,即所有版本的文件和提交。
    • 当您对暂存区的更改感到满意时,可以使用git commit命令将这些更改永久保存到本地仓库的历史记录中。
    • 本地仓库是完全离线工作的,这意味着您可以在没有网络连接的情况下进行提交、查看历史记录和切换分支等操作。
  4. Remote(远程仓库)
    • 远程仓库通常位于服务器上,是多人协作共享代码的地方。最常见的远程仓库是托管在服务如GitHub、GitLab或Bitbucket上的仓库。
    • 您可以使用git push命令将本地仓库的更改上传到远程仓库,也可以使用git pull命令从远程仓库下载最新的更改到本地仓库。
    • 远程仓库可以有多个,通常会有一个默认的远程仓库叫做origin,但这可以根据需要进行更改。

1.安装

官网下载地址:

https://git-scm.com

2.Git常用命令

2.1配置 Git

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"

打开显示隐藏文件

可通过直接编辑配置文件修改配置:
系统配置文件路径位于安装路径下的 \etc\gitconfig。
用户配置文件路径位于: C:\Users\"电脑当前用户名"\.gitconfig。

2.2仓库

2.2.1初始化仓库

这个命令创建一个新的 Git 仓库。它会在当前目录下创建一个 .git 子目录,这个子目录包含了所有的版本控制信息。

git init

示例:新建一个文件夹,例如GitDemo,在此文件夹右键找到 Open Git Bash Here

2.2.2检查本地仓库状态

这个命令显示当前仓库的状态,包括哪些文件被修改过但还没有提交。

git status

2.2.3克隆仓库

这个命令从远程服务器克隆一个仓库到本地。<repository_url> 是远程仓库的 URL。

git clone <repository_url>

2.2.4添加文件到暂存区

git add <file> 命令将指定文件的修改添加到暂存区,准备提交。git add . 命令会添加所有修改过的文件到暂存区。

git add <file>
git add .

2.2.5提交到仓库

这个命令将暂存区的修改提交到仓库,并带上一条提交信息 "Commit message"

git commit -m "Commit message"

2.2.6推送到远程仓库

这个命令将本地的提交推送到远程仓库的 <branch_name> 分支。

git push origin <branch_name>

2.2.7拉取远程仓库更新

这个命令从远程仓库的 <branch_name> 分支拉取最新的提交并合并到本地分支。

git pull origin <branch_name>

2.2.8查看提交历史

这个命令显示提交的历史记录,包括提交的 SHA-1 校验和、作者、日期和提交信息。

git log

2.2.9远程仓库操作

git remote -v 列出所有远程仓库的名称和 URL。git remote add <name> <url> 添加一个新的远程仓库,git remote rm <name> 删除一个远程仓库。

git remote -v
git remote add <name> <url>
git remote rm <name>

2.3分支管理

2.3.1查看分支

这个命令列出所有本地的分支。

git branch

2.3.2创建新分支

这个命令创建一个名为 <new_branch_name> 的新分支。

git branch <new_branch_name>

2.3.3切换分支

这个命令切换到名为 <branch_name> 的分支。

git checkout <branch_name>

2.3.4创建并切换到新分支

这个命令创建一个名为 <new_branch_name> 的新分支,并立即切换到这个新分支。

git checkout -b <new_branch_name>

2.3.5合并分支

这个命令将 <branch_name> 分支的修改合并到当前分支。

git merge <branch_name>

2.3.6删除分支

git branch -d <branch_name>

2.3.7推送分支

git push -u origin new-branch-name

2.3.8重命名当前分支

git branch -m branch-name

2.4其他命令

2.4.1撤销最近一次提交

这个命令撤销最近的提交,但保留工作目录和暂存区的修改。

git reset --soft HEAD~1

2.4.2撤销对文件的修改

这个命令撤销对 <file> 文件的修改,将文件恢复到最近一次提交的状态。

git checkout -- <file>

2.4.3查看差异

这个命令显示工作目录、暂存区和最近一次提交之间的差异。

git diff

2.4.4暂存当前工作

这个命令将当前的工作目录和暂存区的修改保存到一个栈上,以便稍后恢复。

git stash

2.4.5恢复暂存的工作

这个命令恢复最近一次 git stash 命令保存的工作状态,并将其从栈上移除。

git stash pop

3.文件的几种状态

3.1 未跟踪(Untracked)

这意味着Git尚未开始跟踪这个文件。当在工作目录中创建新文件或从外部复制文件时,这些文件会处于未跟踪状态。Git不会对这些文件进行版本控制,直到执行git add命令将它们添加到暂存区。

示例:在GitDemo新建文件hello.java

查看状态

git status

3.2 已暂存(Staged)

这意味着文件已经被修改并添加到暂存区,等待被提交到仓库。在执行git add命令后,文件的修改会被添加到暂存区,此时文件处于已暂存状态。这种状态下,文件的修改已经准备好被提交到Git仓库,可以通过执行git commit命令将修改永久保存到仓库中。

git add .

使用commit命令将暂存区的文件提交到本地仓库

git commit -m "Commit message"

3.3 忽略(Ignored)

在主目录中创建.gitignore 文件,Git 会忽略.gitignore包含的文件,它们不会出现在未跟踪文件列表中。通常,.gitignore 文件用于指定不需要进行版本控制的文件,如编译生成的临时文件、日志文件、vue项目中的node_modules等。忽略文件可以帮助保持仓库的整洁和专注。

.gitignore 文件语法:

4. gitee 实战

4.1创建gitee仓库

4.2配置gitee SSH密钥

打开powershell,输入以下命令

ssh-keygen

中间通过三次回车键确定

查看生成的 SSH 公钥和私钥:

ls ~/.ssh/

输出两个文件名,文件后缀为pub的即为公钥文件,查看公钥:

cat ~/.ssh/****.pub

将公钥复制到设置里的”ssh公钥“位置

4.3拉取项目

将从gitee拉取的文件复制到项目根目录

复制到项目根目录:

在项目根目录打开git bash,提交并推送

git add .
git commit -m “XX”
git push origin master

输入gitee账号密码

成功推送到gitee

5. 冲突处理

5.1什么是冲突

在git中,冲突产生的原因是因为在合并文件时同一个文件的同一个位置都修改了,并且内容不同;也即两个已经提交的分支的相同文件相同位置的不同操作进行了合并,所以产生了冲突;常见产生冲突的操作有两分支合并和远程仓库代码拉取到本地。

5.2 案例

5.2.1 新建分支

#在文件夹A,clone一份master分支:
git clone *****

#然后新建并切换到新分支:
git checkout -b feature-branch-a

修改新分支的文件,例如README.md添加一行

#将分支feature-branch-a推送到远程仓库

git add .
 
git commit -m "feat:xxx" .
 
git push origin feature-branch-a

5.2.2 修改主分支

此时再新建一个文件夹B, 再次把主分支clone下来,同样修改README.md

#将文件夹B修改的主分支pull到远程仓库。

git add .
 
git commit -m "feat:xxx" .
 
git push

5.2.3 合并到主分支

在文件A中从new-a_branch分支切换到主分支,并从远程仓库更新主分支

git checkout master

git pull

合并new-a_branch到master主分支

git merge feature-branch-a

因为在合并前主分支的README已经更改,此时将new-a_branch分支合并到master时,master和new-a_branch的同一个文件的同一个位置都被修改,git并不知道需要保留哪个,因此会产生冲突。

5.2.4 冲突处理

产生冲突后,冲突的文件里对应位置会被标记:

<<<<<<< HEAD
a分支push前我修改了主分支    (这是主分支的修改)
=======
分支A修改                    (这是feature-branch-a分支的修改)
>>>>>>> feature-branch-a

假如要保留feature-branch-a分支的修改,将其他删除,保留分支feature-branch-a的修改即可:

<<<<<<< HEAD
a分支push前我修改了主分支
分支A修改
>>>>>>> feature-branch-a

#使用 git add 命令标记冲突已解决
git add README.md

#提交合并
git commit

#推送合并后的更改到远程仓库
git push