Linux基础 第五讲 Git
Linux基础 第五讲 Git
1.Git教程
1.1 Git基本概念
Git 是一个版本控制工具,可以记录我们每次提交到 Git 中的版本,便于版本控制;上传到云端可以对本地的Git版本进行存档,以及进行多人协作开发。
Git是用树的结构来维护所有的版本记录,最开始节点是一个空的根节点。
HEAD根节点会始终指向最新提交的那个节点。
概念
工作区:仓库的目录。
暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。
工作区、暂存区都是独立于各个分支的。
版本库:存放所有已经提交到本地仓库的代码版本。
版本结构:树结构,树中每个节点代表一个代码版本。
1.2 Git常用命令
个人开发最最最最常用的4个git命令!!!只使用master
分支即可
git pull
git add .
git commit -m "xxx"
git push
协作开发会用到的命令!!
Git全局配置
在使用Git服务之前,你需要进行全局配置
git config --global user.name xxx
:设置全局用户名
git config --global user.email xxx@xxx.com
:设置全局邮箱地址
设置的信息记录会存储在~/.gitconfig
文件中
开始使用的流程,
注意!!!github
的默认分支名为main
1 | git branch -M main # 修改本地的分支名(master --> main) |
Git常用操作
你需要新建一个项目目录 eg. project/
,
git init
:将当前目录配置成git仓库,信息记录在隐藏的.git
文件夹中
目录里的文件被修改后,需要将文件从工作区添加到暂存区并进行持久化
git add XXX
:单独将XXX文件添加到暂存区,可添加多个文件或目录,用空格隔开
这两个命令,通常一起使用
git add .
:将所有待加入暂存区的文件加入暂存区
git commit -m "这次提交的备注信息"
:将暂存区的内容提交到当前分支,进行持久化
git status
:查看当前仓库状态
git diff XXX
:查看XXX文件的工作区相对于暂存区对应的文件的差异
git diff HEAD
: 显示工作区与当前分支最新commit提交之间的差异
git log
:查看当前分支的所有版本,按q
退出查看状态
git log --oneline
或 git log --pretty=oneline
:让日志格式化显示在一行
HEAD会指向最后一次持久化操作的节点,即HEAD指向最新的版本
git log --stat
:显示 commit 历史,以及每次 commit 发生变更的文件
删除/撤销命令
git rm --cached XXX
:将文件从仓库索引目录中删掉,不希望管理这个文件
(将本地文件删除的话,git rm XXX
,提交commit
后,再git push
)
git restore --staged XXX
:将XXX从暂存区里移除,文件内容不会被修改
git restore XXX
:可将暂存区的文件回滚
git checkout — XXX
或 git restore XXX
:将XXX文件尚未加入暂存区的修改全部撤销,类似ctrl+z
代码回滚
git reflog
:查看HEAD指针的移动历史(包括被回滚的版本)
git reset --hard HEAD^
或 git reset --hard HEAD~
:将代码库回滚到上一个版本
git reset --hard HEAD^^
:往上回滚两次”^^”,以此类推git reset --hard HEAD~100
:往上回滚100个版本git reset --hard 版本号
:回滚到某一特定版本(版本号是用git log
看到的commit前7位字符)
创建/合并分支
git checkout -b branch_name
:创建并切换到branch_name
这个分支
git branch branch_name
:创建新分支branch_name
git checkout branch_name
:切换到branch_name
这个分支
git branch
:查看所有分支和当前所处分支
git branch -r
: -r,remote 查看所有远程分支
git branch -a
: -a,all 查看所有分支,包括本地分支和远程分支
git merge branch_name
:将分支branch_name
合并到当前分支上
(若分支合并后有冲突,需要自己手动解决)
git branch -d branch_name
:删除本地仓库的branch_name
分支
git pull
:将远程仓库的当前分支与本地仓库的当前分支合并,从云端拉回本地
git pull origin branch_name
:将远程仓库的branch_name
分支与本地仓库的当前分支合并
ps: 多人协作开发同一个分支时,
第一个人push提交后,第二个人也push提交了会有冲突,需要第二人先pull新版本后,合并本地修改冲突后,再push自己的代码。
远程仓库
你需要再远程仓库创建一个仓库,并配置SSH将主机的公钥填写至远程仓库中。
git remote add origin SSH克隆的地址
:将本地仓库关联到远程仓库
连接gitlab时,进行git clone
时,出现fatal: remote origin already exists.
需要先git remote remove origin
,然后再关联远程仓库
git push -u
:(第一次需要-u,upstream上传流,以后不需要),git push
将当前分支推送到远程仓库
git push origin branch_name
:将本地的某个分支推送到远程仓库
git clone git@git.acwing.com:xxx/XXX.git
:将远程仓库XXX下载到本地,比如用另一台电脑开发
git push --set-upstream origin branch_name
:设置本地的branch_name
分支对应远程仓库的branch_name
分支
git push -d origin branch_name
:删除远程仓库的branch_name
分支
(git branch -d branch_name
:删除本地仓库的branch_name
分支)
git branch --set-upstream-to=origin/branch_name1 branch_name2
:
将远程的branch_name1
分支与本地的branch_name2
分支对应,两分支名最好相同
git checkout -t origin/branch_name
将远程的branch_name
分支拉取到本地
Stash栈操作
使用 Stash
将我们目前工作区和暂存区中未提交的修改添加进去。等处理完一些线上的问题再把刚才的工作的文件从 Stash
中弹出来继续开发,
git stash
:将工作区和暂存区中尚未提交的修改存入栈中
git stash apply
:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素
git stash drop
:删除栈顶存储的修改
git stash pop
:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素
git stash list
:查看栈中所有元素
1.3 其他
小Tips:
让vscode不显示git修改的文件
问题所在:在项目最外层文件夹git init
了,产生了一个.git
文件。
解决方法:在终端进入最外层文件夹,输入命令:rm -rf .git
,删除git相关配置文件
2.作业
1 | homework 5 create # 可以重新创建所有lesson_5的作业 |
注意: 本次作业的10个题目不是独立的,每个题目会依赖于前一个题目,因此评测时如果当前题目错误,则不再评测后续题目。
1 | 创建好作业后,先进入文件夹/home/acs/homework/lesson_5/,然后: |
作业打卡地址
待完成~~