GIT
git配置
在使用 Git 进行版本控制之前,首先需要配置用户名和邮件地址。每一个 Git 提交都会使用这些信息,因此正确配置这些信息非常重要。
git config --global user.name 你的用户名
git config --global user.email 你的邮箱地址
#git config: 固定命令,设置git相关配置
#–global: 全局配置;一次配置,整机在使用git时都生效
配置后,可以运行如下命令查看是否成功
git config --list
#如果信息太多,可以输入 q 退出
如果后续想要修改,只需要重新执行一下命令即可
Git基础命令
初始化空的Git仓库
新建一个文件夹或现有的文件夹并不是 Git 仓库,因为文件夹内不包含 .git
文件夹,没有被 Git 管理。可以在新文件夹或现有文件夹中运行以下命令,得到 .git
文件夹,初始化成功后,Git 就可以开始管理该文件夹了。
git init
初始化空的 git 仓库成功后,在项目文件夹中,开启显示隐藏文件,即可查看 .git
文件夹
记录更新到Git仓库
核心操作:工作区开发
—>将修改后的文件添加到暂存区
—>将暂存区的文件记录到版本库
把工作区变化放到暂存区中
# 将 index.html 添加到暂存区
git add index.html
# 将css目录下一切添加到暂存区
git add css
# .的意思是当前目录下所有变化都暂存,可以一次性把所有变化文件放入暂存区
git add .
把暂存区内容,提交到版本库
git commit -m '提交的内容说明'
Git日志及状态查看
查看所有提交的日志记录,命令如下
git log
简化查看,可以输入如下命令
git log --oneline
查看 git 仓库变化,只能看未提交的所有变更的文件状态
git status
Git版本回退
回退命令语法如下
git reset --hard 版本号
查看版本号
git log --oneline
输入git reflog
命令,可以查看 git 所有的操作记录,包括你的reset记录,使用情景:reset后想要再回到最近一次提交的记录,但发现git log看不到最近一次提交的记录了
git reflog
Git分支
查看分支
# 查看当前版本库所有分支,命令效果中绿色带*代表现在所处的分支
git branch
创建分支
# 创建分支
git branch 分支名
切换分支
# 切换分支命令
git checkout 分支名
创建并切换分支
git checkout -b 分支名
分支合并
首先切换到要合并到的目标分支上
# 切换分支(以master主分支为例)
git checkout master
合并命令语法
# 把目标分支(以reg为例)名下的所有记录, 合并到当前分支(master)下
git merge reg
合并时冲突问题
在两个分支修改了同一个文件并提交过,在合并的时候,就会产生冲突
#比如我在branch2分支时,在hello.txt文件中增加一行"This is branch2 vim" 并将记录更新到Git库
86135@LAPTOP-MagicBook14 MINGW64 /d/gitrepository/code (branch2)
$ git add hello.tx
86135@LAPTOP-MagicBook14 MINGW64 /d/gitrepository/code (branch2)
$ git commit -m 'branch2提交hello.txt'
[branch2 8c08965] ‘branch2提交hello.txt’
1 file changed, 1 insertion(+)
#然后我在master分支时,在hello.txt文件中增加一行"This is master vim" 并将记录更新到Git库
86135@LAPTOP-MagicBook14 MINGW64 /d/gitrepository/code (branch2)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'system/master'.
86135@LAPTOP-MagicBook14 MINGW64 /d/gitrepository/code (master)
$ git add hello.txt
86135@LAPTOP-MagicBook14 MINGW64 /d/gitrepository/code (master)
$ git commit -m 'master提交hello.txt'
[master 882bf98] master提交hello.txt
1 file changed, 1 insertion(+)
合并时就会出现下面冲突问题
86135@LAPTOP-MagicBook14 MINGW64 /d/gitrepository/code (master)
$ git merge branch2
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
我们打开hello.txt文件,里面的内容是这样的:
hello world!
Today is a good day!
<<<<<<< HEAD
This is master vim
=======
This is branch2 vim
>>>>>>> branch2
我们可以手动编辑,修改为我们最终要保留的内容,在解决了文件中的所有冲突后,需要将修改后的文件添加到暂存区,就像平常提交文件修改一样。
86135@LAPTOP-MagicBook14 MINGW64 /d/gitrepository/code (master|MERGING)
$ git add hello.txt
86135@LAPTOP-MagicBook14 MINGW64 /d/gitrepository/code (master|MERGING)
$ git commit -m '解决了hello.txt在合并分支时产生的冲突'
[master d548080] 解决了hello.txt在合并分支时产生的冲突
删除分支
git branch -d 分支名
如果分支的修改没有被合并到其他分支上,Git 会提示一个类似以下的错误信息:
error: The branch 'branch_name' is not fully merged. If you are sure you want to delete it, run 'git branch -D branch_name'.
如果确定要删除该分支并且不在乎丢失该分支的修改,可以使用
git branch -D <branch_name>
命令来强制删除该分支。但这样会丢失掉分支上的未合并修改
Git忽略文件
有的时候,我们某些文件或文件夹不想让 git 进行跟踪管理。这时候可以在 .git 文件夹同级目录下新增.gitignore
的忽略文件并写入忽略规则(此处的文件名就是 .gitignore
,不是后缀)
# .gitignore内容:
password.txt
其余用法:
# 忽略文件夹
css
# 忽略文件夹下的某个文件
css/index.js
# 忽略文件夹下某类文件
css/*.js
.gitignore
文件在项目中可以根据脚手架自动生成,无需自己编写,当然如果你非要写,以下是Vue官方自动生成的.gitignore
文件代码,可供复制使用
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
Git远程仓库
Gitee
注册登录
注册登录 gitee.com 网站以后,添加主邮箱为自己本地 git 仓库设置的邮箱,注意一定要相同,否则无法正确提交 如果忘记了本地设置的邮箱地址:
可以打开控制台输入 git config --list 重新查看邮箱地址
当然也可以使用 git config --global user.email 你的邮箱地址重新覆盖原来的邮箱地址 邮箱设置界面不要勾选不公开我的邮箱地址,否则也无法正常提交
新建仓库
常见后跳转到下面页面,得到一个远程仓库的地址链接,一般以.git结尾,我们选择SSH路径
SSH配置
我们可以在本机一次性配置 SSH 以后免密登录,SSH 密钥组成和作用如下:
-
作用: 实现本地仓库和 gitee 平台之间免登录的加密数据传输
-
组成: id_rsa (私钥文件,存放于客户端的电脑中即可)、id_rsa.pub (公钥文件,需要配置到 gitee 平台中)
-
SSH 密钥创建与使用步骤:
先在本机生成一个密钥 (以后也可以重新生成、重新配置),打开一个终端,输入以下命令:
ssh-keygen -t rsa -C "你注册账号的邮箱"
连续敲击 3 次回车,即可在C:\Users\用户名文件夹.ssh目录中生成id_rsa和id_rsa.pub两个文件
使用 VSCode 打开id_rsa.pub文件,复制里面的文本内容
粘贴配置到 码云 -> 设置 -> ssh 公钥 中即可
初始化空仓库
先给本地仓库配置个远程仓库的地址, 建立仓库之间的链接
由于每次 push 操作都需要带上远程仓库的地址,十分麻烦,我们可以给仓库设置一个别名
# 给远程仓库设置一个别名
git remote add 仓库别名 仓库地址(SSH地址,可以去gitee空仓库的代码页直接复制即可)
git remote add origin [email protected]:(username)/repository.git
# 如果要删除 origin 这个别名
git remote remove origin
注意:推送的本地仓库一定要非空并且本地暂存提交过,不然会报错!这点也很好理解,你传个空的项目到一个空仓库,这可不得给你报错吗
Push向远程推送
# 第一次推送到远程时需要指定具体的分支,因为远程仓库并没有这个分支
# 使用 -u 记录 push 到远端分支的默认值,将来直接 git push 即可
git push -u 仓库别名 分支名
#假设本地有一个feature_branch,远程仓库别名是origin,要将其推送到远程的test_branch,命令就是:
git push origin feature_branch:test_branch
#当本地分支和远程目标分支名称相同(本地分支和远程分支都为test_branch)时,可以省略冒号和远程分支名称
git push origin test_branch
同样需要注意可能出现的合并冲突和权限问题。如果远程分支已经有了新的更新,可能需要先拉取更新(git pull origin test_branch
)并解决冲突后再进行推送;同时要确保你拥有向远程test_branch
分支推送的权限。
Pull从远程拉取
假设当前处于本地的 master
分支,并且希望拉取远程仓库 origin
中 master
分支的更新到本地 master
分支,可以直接使用以下命令:
git pull origin master
示例场景: 假设你和团队成员共同开发一个项目,其他成员已经向远程仓库的 master
分支推送了新的代码提交,你本地的 master
分支处于旧的状态。执行上述 git pull origin master
命令后,Git 会先从远程仓库 origin
的 master
分支获取最新的提交记录(这一步类似执行 git fetch origin master
),然后自动尝试将获取到的更新合并到你本地的 master
分支(相当于执行 git merge origin/master
)。
如果希望拉取远程仓库 origin
中 master
分支的更新到本地 dev
分支
先切换到 dev
分支:
git checkout dev
再将远程master分支更新合并到本地的 dev
分支
git pull origin master
如果在合并过程中出现冲突,Git 会提示你解决这些冲突。
查看冲突文件
git status
需要手动编辑冲突的文件,解决冲突后,使用以下命令标记冲突已解决:
git add 冲突文件
git commit -m '提交说明'
比较差异
在 Git 中,你可以使用多种方式来比较差异,包括比较本地分支、远程分支以及本地和远程分支之间的差异。以下是一些常用的命令和方法:
1. 比较本地分支之间的差异
假设你有两个本地分支 branch1
和 branch2
,你可以使用以下命令来比较它们之间的差异:
git diff branch1..branch2
或者使用 git diff
的 --name-status
选项来查看文件的更改状态:
git diff --name-status branch1..branch2
2. 比较本地分支与远程分支的差异
假设你有一个本地分支 local_branch
和一个远程分支 origin/remote_branch
,你可以使用以下命令来比较它们之间的差异:
git diff local_branch origin/remote_branch
3. 比较本地分支与远程分支的最新提交
如果你只想比较本地分支与远程分支的最新提交,可以使用以下命令:
git diff local_branch..origin/remote_branch
4. 比较工作目录与暂存区的差异
如果你想查看工作目录(未暂存的更改)与暂存区(已暂存的更改)之间的差异,可以使用以下命令:
git diff
它会显示哪些更改已经在工作目录中进行了,但尚未被 git add
命令添加到暂存区。
5. 比较暂存区与最新提交的差异
如果你想查看暂存区与最新提交之间的差异,可以使用以下命令:
git diff --cached
它会显示哪些更改已经被 git add
命令添加到暂存区,但尚未提交到版本库。
6. 比较工作目录与最新提交的差异
如果你想查看工作目录与最新提交之间的差异,可以使用以下命令:
git diff HEAD
它会显示哪些更改已经在工作目录中进行了,但尚未被 git add
命令添加到暂存区,或者已经被 git add
命令添加到暂存区但尚未提交到版本库。
-
git diff
:-
只显示工作目录与暂存区之间的差异。
-
不包括已经添加到暂存区但尚未提交的更改。
-
-
git diff HEAD
:-
显示工作目录与最新提交之间的差异。
-
包括已经添加到暂存区但尚未提交的更改。
-
7. 使用 git log
查看提交历史和差异
你可以使用 git log
命令来查看提交历史,并使用 --oneline
、--graph
等选项来美化输出。例如:
git log --oneline --graph
如果你想查看两个分支之间的提交历史差异,可以使用以下命令:
git log branch1..branch2
问答
题目 1:创建并切换分支
问题:你当前在 master
分支上,希望创建一个新的分支 feature-a
并切换到该分支。请写出完成此操作的 Git 命令。
答案:
git checkout -b feature-a
题目 2:合并分支
问题:你当前在 feature-a
分支上,并且已经完成了所有工作。现在你希望将 feature-a
分支的更改合并到 master
分支。请写出完成此操作的 Git 命令。
答案:
git checkout master git merge feature-a
题目 3:解决合并冲突
问题:在合并 feature-a
分支到 master
分支时,出现了合并冲突。你如何解决这些冲突?请写出解决冲突的步骤。
答案:
-
查看冲突文件:
git status
-
手动编辑冲突文件:打开冲突文件,手动解决冲突。
-
标记冲突已解决:
git add <冲突文件>
-
提交合并结果:
git commit
题目 4:拉取远程更新
问题:你当前在 dev
分支上,并且希望拉取远程仓库 origin
中 master
分支的更新到本地 dev
分支。请写出完成此操作的 Git 命令。
答案:
git pull origin master
题目 5:比较分支差异
问题:你有两个本地分支 branch1
和 branch2
,希望比较它们之间的差异。请写出完成此操作的 Git 命令。
答案:
git diff branch1..branch2
题目 6:查看提交历史
问题:你希望查看当前分支的提交历史,并且希望输出简洁的提交信息。请写出完成此操作的 Git 命令。
答案:
git log --oneline
题目 7:撤销暂存区的更改
问题:你使用 git add
命令将一些文件添加到暂存区,但后来决定撤销这些更改。请写出完成此操作的 Git 命令。
答案:
git reset
题目 8:撤销工作目录的更改
问题:你修改了一些文件,但后来决定撤销这些更改,恢复到最新提交的状态。请写出完成此操作的 Git 命令。
答案:
git checkout -- <文件名>
题目 9:删除分支
问题:你已经完成了 feature-a
分支的工作,并且已经将其合并到 master
分支。现在你希望删除 feature-a
分支。请写出完成此操作的 Git 命令。
答案:
git branch -d feature-a
题目 10:推送本地分支到远程仓库
问题:你创建了一个新的本地分支 feature-b
,并且希望将其推送到远程仓库 origin
。请写出完成此操作的 Git 命令。
答案:
git push -u origin feature-b
题目 11:查看远程仓库信息
问题:你希望查看当前配置的远程仓库信息。请写出完成此操作的 Git 命令。
答案:
git remote -v
题目 12:拉取远程更新
问题:你希望拉取远程仓库 origin
中的最新更新到本地当前分支。请写出完成此操作的 Git 命令。
答案:
git pull origin
问题:你希望拉取特定分支master的更新到本地当前分支。请写出完成此操作的 Git 命令。
答案:
git pull origin master
这会从远程仓库 origin
的 master
分支拉取更新并合并到当前分支。
题目 13:查看当前分支
问题:你希望查看当前所在的分支。请写出完成此操作的 Git 命令。
答案:
git branch
题目 14:查看文件更改状态
问题:你希望查看当前工作目录中文件的更改状态。请写出完成此操作的 Git 命令。
答案:
git status
题目 15:查看特定文件的更改历史
问题:你希望查看特定文件 example.txt
的更改历史。请写出完成此操作的 Git 命令。
答案:
git log example.txt
题目 16:查看特定提交的详细信息
问题:你希望查看特定提交 abc123
的详细信息。请写出完成此操作的 Git 命令。
答案:
git show abc123
题目 17:撤销最后一次提交
问题:你刚刚提交了一次更改,但后来决定撤销这次提交。请写出完成此操作的 Git 命令。
答案:
git reset --soft HEAD~1
题目 18:恢复误删除的文件
问题:你误删除了一个文件 example.txt
,并且希望恢复该文件。请写出完成此操作的 Git 命令。
答案:
git checkout -- example.txt
题目 19:查看远程分支
问题:你希望查看远程仓库中的所有分支。请写出完成此操作的 Git 命令。
答案:
git branch -r
题目 20:重命名本地分支
问题:你希望将本地分支 old-branch
重命名为 new-branch
。请写出完成此操作的 Git 命令。
答案:
git branch -m old-branch new-branch
本文参考: