【Git使用说明书】

💻 Git解决什么问题?

	备份:电脑上的代码及时提交,服务器上的配置及时提交 
	代码还原:代码改出bug,希望回滚 
	协同开发:多人维护 
	代码追责:追溯代码编写人和编写时间

💻 版本控制方式有哪些?

	集中式版本控制:例如SVN和CVS 
	版本库集中存放在中央服务器,每个员工从中央服务器下载代码,必须联网才能工作(局域网or互联网). 
	个人修改之后提交到中央版本库. 
	
	出现的问题:
	中央服务器宕机了怎么办
	局域网断开了怎么办
	服务器的磁盘坏了怎么办
	
	分布式版本控制:例如Git 
	分布式版本控制系统没有中央服务器,每个人的电脑上就是一个完整的版本库,工作时候无需联网. 
	多人协作只需要各自的修改推送给对方.

💻 Git如何初始化姓名与邮箱?

在这里插入图片描述

git config --global user.name "XXX"    //设置
git config --global user.email "XXX"
git config --global user.name          //查看
git config --global user.email

💻 如何为常用指令配置别名?

STEP1:直接在终端输入 alias 命令,测试alias命令是否好使
在 Git Bash 中直接输入:

alias ll='ls -al'
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

然后立即测试:

ll
git-log

步骤 2:永久保存 alias 到 ~/.bashrc
如果你希望 alias 永久生效,需要将它们写入 ~/.bashrc 文件。

执行以下命令:

echo "alias ll='ls -al'" >> ~/.bashrc
echo "alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'" >> ~/.bashrc

然后让它立即生效:

source ~/.bashrc

步骤 3:检查 alias 是否配置成功
执行:

alias

或者:

alias ll
alias git-log

👉 如果 ll='ls -al'git-log='git log --pretty=oneline --all --graph --abbrev-commit' 出现在输出中,说明 alias 配置成功!


总结
1️⃣ 临时 alias(仅当前会话有效):

alias ll='ls -al'
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

2️⃣ 永久 alias(每次打开 Git Bash 都生效):

echo "alias ll='ls -al'" >> ~/.bashrc
echo "alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'" >> ~/.bashrc
source ~/.bashrc

3️⃣ 检查 alias 是否生效:

alias ll
alias git-log

🚀 这样,你的 alias 就永久生效了!


💻 如何解决GitBash乱码问题?

方法1:
打开GitBash执行下面命令

git config --global core.quotepath false

方法2:
${git_home}/etc/bash.bashrc文件最后加入下面两行
在这里插入图片描述

export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

💻 如何获取本地Git仓库?

要使用Git对我们的代码进行版本控制,首先需要获得本地仓库
1)在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
2)进入这个目录中,点击右键打开Git bash窗口
3)执行命令git init
4)如果创建成功后可在文件夹下看到隐藏的.git目录。
在这里插入图片描述


💻 如何理解分支的概念?

分支,意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
在开发中,一般有如下分支使用原则与流程:

  • master (生产) 分支 线上分支,主分支,中小规模项目作为线上运行的应用对应的分支。
    只有这个分支才能上线.
  • develop(开发)分支 是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。

开发新功能,在develop的分支feature上开发,
开发完再合并到develop上面
再把develop合并到master上.发布release版本(稳定版本x.x.x)
feature可以删除,develop不能删除.

  • feature/xxxx分支 从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
  • hotfix/xxxx分支, 从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、- develop分支。

仔细看下图

  • 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。

在这里插入图片描述


💡 Git基础操作指令是什么?

git add (工作区 --> 暂存区)
git commit (暂存区 --> 本地仓库)
在这里插入图片描述
查看修改的状态(status)
作用:查看的修改的状态(暂存区、工作区)
命令形式:git status

添加工作区到暂存区(add)
作用:添加工作区一个或多个文件的修改到暂存区
命令形式:git add 单个文件名|通配符
将所有修改加入暂存区:git add .

提交暂存区到本地仓库(commit)
作用:提交暂存区内容到本地仓库的当前分支
命令形式:git commit -m '注释内容'

查看提交日志(log)
作用:查看提交记录
命令形式:git log [option]

[option]
(这些在前面alias别名已经设置过,名字叫"git-log")
--all 显示所有分支
--pretty=oneline 将提交信息显示为一行
--abbrev-commit
使得输出的commitID更简短
--graph 以图的形式显示

版本回退(reset)
作用:版本切换
命令形式:git reset --hard commitID
commitID 可以使用git-log或git log指令查看

另:如何查看已经删除的记录?
git reflog 这个指令可以看到已经删除的提交记录

添加文件至忽略列表(.gitignore)
我不想要git管理我的.a后缀的文件
创建忽略文件并编辑:

 touch .gitignore
 vi .gitignore

添加:

*.a

分支(branch)
查看本地分支
命令:git branch
创建本地分支
命令:git branch 分支名
切换分支(checkout)
命令:git checkout 分支名
我们还可以直接切换到一个不存在的分支(创建并切换
命令:git checkout -b 分支名

合并分支(merge)
一个分支(合并分支)上的提交可以合并到另一个分支(目标分支)

需要先切换到目标分支:git checkout 目标分支名
合并命令:git merge 合并分支名
删除分支
不能删除当前分支,只能删除其他分支
git branch -d 分支名 删除分支时,需要做各种检查
git branch -D 分支名 不做任何检查,强制删除

小d删不了用大D

解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:

处理文件中冲突的地方
将解决完冲突的文件加入暂存区(add)
提交到仓库(commit)


💻 删除 Git 中的文件或文件夹,强制删除但仍然可以恢复

  1. 删除文件但保留本地文件
    从 Git 跟踪中删除,文件仍保留在本地:

    git rm --cached <文件名>
    

    例如,删除 example.txt 文件:

    git rm --cached example.txt
    
  2. 提交删除操作
    删除后,提交到 Git 仓库:

    git commit -m "删除 example.txt 文件的 Git 跟踪"
    
  3. 推送到远程仓库(如果有的话)
    如果你的项目有远程仓库(如 GitHub),需要推送提交:

    git push
    

💻 恢复被删除的文件

如果你后悔删除,想恢复文件,可以按照以下步骤:

  1. 恢复文件
    使用以下命令将文件恢复到工作区:

    git checkout HEAD -- <文件名>
    

    比如恢复 example.txt

    git checkout HEAD -- example.txt
    
  2. 重新添加并提交文件
    如果你希望 Git 继续管理这个文件,重新添加并提交它:

    git add example.txt
    git commit -m "恢复 example.txt 文件"
    git push
    

好了,你可以从 Git 跟踪中删除文件并在需要时恢复它了!


💻 回退所有分支到某个时间点?

for branch in $(git branch | sed 's/*//'); do
    git checkout $branch
    git reset --hard <目标提交哈希>
    git add .
    git commit -m "回退到 <目标提交哈希>"
done

💻如何撤回上一步操作

在 Git 中,撤回上一步操作的方法取决于你执行的具体命令:


1. 如果执行的是 git add(已暂存,但未提交)

git reset HEAD <文件名>

或者撤回所有已暂存的文件:

git reset HEAD

💡 这会让文件回到未暂存状态,但不会丢失修改。


2. 如果执行的是 git commit(已提交,但未推送)
撤回最近一次提交,并保留修改:

git reset --soft HEAD~1

💡 这会撤销提交,但文件仍在暂存区,可重新修改并提交。

如果不想保留修改:

git reset --hard HEAD~1

💡 这会彻底删除提交和修改,无法恢复,请谨慎使用。


3. 如果执行的是 git push(已推送到远程仓库)
撤回最近一次提交并强制更新远程仓库:

git reset --hard HEAD~1
git push origin main --force

💡 这可能影响团队合作,建议谨慎操作!

如果只是撤回推送但不删除提交:

git revert HEAD
git push origin main

💡 这样会生成一个新的“撤销提交”,保留历史记录。


总结

  • git reset:撤销提交或暂存(有不同级别的撤销)。
  • git revert:用一个新的提交来撤销之前的提交(推荐)。
  • git push --force:强制推送,谨慎使用。

如果不确定,可以先用 git status 查看当前状态,再选择合适的撤回方式! 🚀


⚠️【基础命令练习,请务必经常做此练习】


[其他命令]

设置姓名和邮箱

git config --global user.name XXX
git config --global user.email XXX

查看姓名和邮箱

git config --global user.name
git config --global user.email

永久保存alias设置的别名,ll和git-log

例1:设置alias ll=‘ls -al’

第一步:设置
alias ll='ls -al'
第二步:追加到配置文件
echo "alias ll='ls -al'" >> ~/.bashrc
第三步:立即生效
source ~/.bashrc
第四步:检查
alias

例2:设置alias git-log=‘git log --pretty=oneline --all --graph --abbrev-commit’

第一步:设置
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
第二步:追加到配置文件
echo "alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'" >> ~/.bashrc
第三步:立即生效
source ~/.bashrc
第四步:检查
alias

两种方法解决乱码问题
方法一:

git config --global core.quotepath false

方法二:

第一步:
cd /e/Git
第二步:
vi .bashrc
第三步:
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

🚀🚀🚀🚀🚀[以下为常用命令练习]🚀🚀🚀🚀🚀
初始化git

git init

创建file00.txt文件夹

touch file00.txt

提交到仓库,备注:master分支初始化

git add .
git commit -m "master分支初始化"

查看日志

git-log

[分支一的创建和第一次提交]

创建分支1

git branch 1

切换到分支1

git checkout 1

创建file01.txt

touch file01.txt

创建file01.a

touch file01.a

创建.gitignore把后缀a忽略

touch .gitignore
vi .gitignore
*.a

编辑file01.txt:这是分支1的01文件

vi file01.txt
这是分支1的01文件

查看当前状态 (应该是未跟踪状态)

git status

提交到仓库:分支1的第1次提交

git add .
git commit -m "分支1的第1次提交"

查看当前状态 (应该在分支1)

git status

[分支2的创建和第一次提交]

创建并切换到分支2

git checkout -b 2

创建file02.txt

touch file02.txt

创建file02.a

touch file02.a

创建.gitignore把后缀a忽略

touch .gitignore
vi .gitignore
*.a

编辑file02.txt:这是分支2的02文件

vi file02.txt
这是分支2的02文件

查看当前状态 (应该是未跟踪)

git status

提交到仓库:分支2的第1次提交

git add .
git commit -m "分支2的第1次提交"

查看当前状态 (应该在分支2)

git status

[分支3的创建和第一次提交]

创建并切换到分支3

git checkout -b 3

创建file03.txt

touch file03.txt

创建file03.a

touch file03.a

创建.gitignore把后缀a忽略

touch .gitignore
vi .gitignore
*.a

编辑file03.txt:这是分支3的03文件

vi file03.txt
这是分支3的03文件

查看当前状态 (应该在分支3)

git status

提交到仓库:分支3的第1次提交

git add .
git commit -m "分支3的第1次提交"

查看当前状态 (应该在分支3)

git status

在这里插入图片描述


[分支123的第二次提交]

切换到分支1

git checkout 1

编辑file01.txt:这是分支1的第一次修改

vi file01.txt
这是分支1的第一次修改

提交到仓库:分支1的第2次提交

git add .
git commit -m "分支1的第2次提交"

切换到分支2

git checkout 2

编辑file02.txt:这是分支2的第一次修改

vi file02.txt
这是分支2的第一次修改

提交到仓库:分支2的第2次提交

git add .
git commit -m "分支2的第2次提交"

切换到分支3

git checkout 3

编辑file03.txt:这是分支3的第一次修改

vi file03.txt
这是分支3的第一次修改 

提交到仓库:分支3的第2次提交

git add .
git commit -m "分支3的第2次提交"

查看提交日志

git-log

在这里插入图片描述


[分支123的第三次提交]

切换到分支1

git checkout 1

编辑file01.txt:这是分支1的第二次修改

vi file01.txt
这是分支1的第二次修改

提交到仓库:分支1的第3次提交

git add .
git commit -m "分支1的第3次提交"

切换到分支2

git checkout 2

编辑file02.txt:这是分支2的第二次修改

vi file02.txt
这是分支2的第二次修改

提交到仓库:分支2的第3次提交

git add .
git commit -m "分支2的第3次提交"

切换到分支3

git checkout 3

编辑file03.txt:这是分支3的第二次修改

vi file03.txt
这是分支3的第二次修改

提交到仓库:分支3的第3次提交

git add .
git commit -m "分支3的第3次提交"

查看提交日志

git-log

在这里插入图片描述


[版本回退,删除分支]

把分支1和分支2的版本回退到第二次提交的时候

git reset --hard e3bcb1e
git reset --hard f37923d

检查删除和强制删除分支3

git checkout 2//先切换到其他分支
git branch -D 3

clear一下gitbash

clear

把分支3回退到第二次提交的时候(查看已经删除的记录)

git reflog//查看已经删除的记录

在这里插入图片描述

git reset --hard d564a1c

[合并分支]

把分支1和2合并到master分支

git checkout master//切换到目标分支
git merge 1//合并分支1
git merge 2//合并分支2

看现在有那些分支

git branch

把分支3删除\分支12合并到master之后:

把file03.txt里面的所有内容复制粘贴到file02.txt

cat file03.txt >> file02.txt

再把file02.txt里面的所有内容剪切粘贴到file01.txt

cat file02.txt >> file01.txt && > file02.txt

剪切file01.txt内容到新文件test.txt,同时file01.txt还存在

cat file01.txt > test.txt && > file01.txt

把file00.txt文件重命名为log.txt

mv file00.txt log.txt

删除整个目录中所有后缀名为.a的文件

rm -f *.a

删除整个目录中所有文件名中带file的文件

rm -f *file*

在test.txt中追加:我成功了*

echo "我是傻逼" >> test.txt

💡可复制的Git命令,自我使用空练习册

💻推送第一步:配置SSH公钥?

1 生成SSH公钥

ssh-keygen -t rsa

2 不断回车

如果公钥已经存在,则自动覆盖

4 Gitee设置账户共公钥

5 获取公钥

cat ~/.ssh/id_rsa.pub

在这里插入图片描述
6 验证是否配置成功

ssh -T git@gitee.com

💻怎么设置远程仓库?

前提:
本地初始化了git
远程仓库已经建好

1 设置远程仓库:

git remote add <远程仓库名,默认origin> <你的远程仓库地址>

2 查看远程仓库是否设置成功:

git remote

3 本地仓库同步到远程仓库:
你可以先拉取远程仓库的更改并合并到本地,再进行推送:

git pull origin master --allow-unrelated-histories

pull=fetch+merge

git add .
git commit -m "解决合并冲突"

4 推送到远程仓库

if (本地分支名 == 远程分支名) {
    // 如果本地分支和远程分支名称相同,可以直接推送本地分支
    git push origin 本地分支名
} else {
    // 如果本地分支和远程分支名称不同,需要明确指定推送的远程分支
    git push origin 本地分支名:远程分支名
}

正常推送:

git push --set-upstream origin master:master #--set-upstream建立追踪关系

看一下[本地分支:远程分支]对应绑定关系:
(如果建立好了对应关系,以后直接git push就好了,不用再告诉git哪个分支推送到哪个分支了)

git branch -vv

强制推送:(注意:这会覆盖远程仓库的历史):

git push origin master --force

总结一下:

git init:初始化本地仓库。
git remote add origin <远程仓库地址>:关联远程仓库。
git push -u origin master:首次推送并关联分支。
git pull:先拉取。
git push :再推送。
(推送前要解决冲突)

💻如果已经绑定了远程仓库地址,如何更改远程仓库 URL?

更改远程仓库 URL:

git remote set-url origin <新地址>

好了,测试一下:
查看当前 Git 仓库的远程仓库信息:

git remote -vv 

查看远程仓库的 URL 和别名。通过这个命令,你可以查看你的本地仓库与哪些远程仓库关联,以及它们的读写权限(fetch 和 push)。
输出示例:

$ git remote -vv
origin  https://github.com/username/repository.git (fetch)
origin  https://github.com/username/repository.git (push)

解释:

origin:是远程仓库的别名,默认情况下,Git 会把第一个添加的远程仓库命名为 origin。
https://github.com/username/repository.git:是远程仓库的 URL 地址。
(fetch):表示用于拉取(git fetch)的 URL 地址。 (push):表示用于推送(git push)的 URL 地址。

如果输出为你修改后的url仓库地址,则表明修改成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bingo冰冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值