目录
- 💻 Git解决什么问题?
- 💻 版本控制方式有哪些?
- 💻 Git如何初始化姓名与邮箱?
- 💻 如何为常用指令配置别名?
- 💻 如何解决GitBash乱码问题?
- 💻 如何获取本地Git仓库?
- 💻 如何理解分支的概念?
- 💡 Git基础操作指令是什么?
- 💻 删除 Git 中的文件或文件夹,强制删除但仍然可以恢复
- 💻 恢复被删除的文件
- 💻 回退所有分支到某个时间点?
- 💻如何撤回上一步操作
- ⚠️【基础命令练习,请务必经常做此练习】
- 💡[可复制的Git命令,自我使用空练习册](https://gitee.com/yin-yibing/practice/blob/master/Git)
- 💻推送第一步:配置SSH公钥?
- 💻怎么设置远程仓库?
- 💻如果已经绑定了远程仓库地址,如何更改远程仓库 URL?
💻 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 中的文件或文件夹,强制删除但仍然可以恢复
-
删除文件但保留本地文件:
从 Git 跟踪中删除,文件仍保留在本地:git rm --cached <文件名>
例如,删除
example.txt
文件:git rm --cached example.txt
-
提交删除操作:
删除后,提交到 Git 仓库:git commit -m "删除 example.txt 文件的 Git 跟踪"
-
推送到远程仓库(如果有的话):
如果你的项目有远程仓库(如 GitHub),需要推送提交:git push
💻 恢复被删除的文件
如果你后悔删除,想恢复文件,可以按照以下步骤:
-
恢复文件:
使用以下命令将文件恢复到工作区:git checkout HEAD -- <文件名>
比如恢复
example.txt
:git checkout HEAD -- example.txt
-
重新添加并提交文件:
如果你希望 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仓库地址,则表明修改成功!