Acwing linux 第五讲git
代码部分我给大家在最后单独整一个页面好看,正文内容里面也有大家可以一边看一用!!!!!!!!!!!!!!!!!!!!
昨天讲了ssh内容,今天讲解git,git是个灰常重要的工具,所以我要给大家先讲一下陌生的git。
先放网上解释:Git?是一种分布式版本控制系统,即,代码的本地克隆就是一个完整的版本控制存储库。 通过这些功能齐全的本地存储库,无论脱机还是远程都能轻松工作。 开发人员会在本地提交其工作,然后再将存储库的副本与服务器上的副本进行同步。 这种范例不同于集中式版本控制,后者要求客户端必须先与服务器同步代码,然后才能创建新版代码。?Git?的灵活性和受欢迎程度使其成为所有团队的绝佳选择。 很多开发人员和大学毕业生都已知道如何使用?Git。?Git?的用户社区创建了各种资源来训练开发人员,而?Git?的受欢迎程度也使得在需要时可轻松获得帮助。 几乎每个开发环境都有在各大主流操作系统上实现的?Git?支持和?Git?命令行工具
貌似有点难懂,我给大家讲个冷笑话方便一下大家的理解吧。
有一天,一个程序员走进了一家咖啡店。他打开电脑,开始写代码。突然,他的电脑屏幕变得一片漆黑。他惊慌失措,不知道发生了什么事情。
这时,一个神秘的声音在他的耳边响起:“不用担心,我在这里!” 声音的主人是一个名为“Git”的虚拟助手。
Git告诉他:“你的代码出现了一些问题,我已经帮你解决了。现在你可以继续工作了。”
程序员非常感激,问:“你是怎么做到的?”
Git回答:“很简单,我使用了一种叫做‘版本控制’的技术。我跟踪了你的代码的变化,一旦出现问题,我就可以回滚到之前的版本,或者合并新的代码。”
程序员听后恍然大悟:“原来如此!我以前一直以为‘Git’只是一个用来跟踪代码变化的工具,没想到它还能帮我解决问题!”
Git笑着说:“是的,我就是你的‘救星’!以后遇到问题,记得找我哦!”
这个笑话通过一个虚拟助手Git的形象,介绍了Git的作用——版本控制。它可以帮助程序员更好地管理代码的变化,避免出现错误和冲突。同时,Git还可以回滚到之前的版本,或者合并新的代码,从而解决代码中出现的问题。
下面我放我的笔记和部分内容的截屏,供大家理解
第五讲 git
代码托管平台:git.acwing.com
0、公钥的添加
如何获得公钥:在家目录下 ssh-keygen然后一直回车,就有公钥了
成功产生公钥后在 家目录 下的 .ssh/ 下,公钥就是id_rsa.pub
1、git基本概念
工作区:仓库的目录。工作区是独立于各个分支的。
暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。
版本库:存放所有已经提交到本地仓库的代码版本
版本结构:树结构,树中每个节点代表一个代码版本。
add可以将修改后的文件放到暂存区,文件变绿表示已经放入暂存区
每次commit后暂存区就会清空
注意删文件rm a.txt b.txt操作也是需要被可持久化并且可以被存在暂存区的(暂存区不仅可以存加文件、修改文件,也可以存删文件操作)(注意不管是加还是删都用add,add不是创建,而是将对文件的操作加到暂存区),例如
rm a.txt b.txt;然后git add a.txt b.txt;再如果git restore --staged a.txt就可以将删除a这个操作从暂存区中去除;然后git restore a.txt就可以将它复原到工作区(因此我们如果不小心将某文件删除,可以回滚);就算将删除操作可持久化commit了,也可以将指针回滚到上一个版本
2、git常用命令(本地)
1、git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中
2、git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中
3、git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
4、git add XX:将XX文件添加到暂存区
git add .:将所有待加入暂存区的文件加入暂存区
5、git rm --cached XX:将文件从仓库索引目录中删掉
git restore --staged <file> 与 git rm --cached <file>的区别,后者是“不希望管理某个文件”,将某个文件从管理的列表中删除(git不一定对每个文件都要管理,untracked file意思是还没有管理它),如果还想加回去,就add即可加回去前者是“我还要管理这个文件,但我只是把它从暂存区里拿了出来”
6、git commit -m "给自己看的备注信息":将暂存区的内容提交到当前分支(也就是说在上一个节点上面再产生一个新的节点,同时HEAD指针移动到这个新的节点)(注意这个备注信息是很重要的)
注意commit不一定要上传所有新修改的文件到下一个版本中;比如有两个文件都被修改了,但只add一个文件到暂存区,然后直接commit
7、git status:查看仓库状态
8、git diff XX:查看XX文件相对于暂存区修改了哪些内容
9、git log:查看当前分支的所有版本
从原先的空节点Empty走到当前节点的路径(从下往上走)
前七个字母就是版本号id
git log --pretty=oneline可以显示成一行
10、git reflog:查看HEAD指针的移动历史(包括被回滚的版本)(也是从下往上看)
在代码库被回滚后就用reflog来查看指针的移动历史,可以看到每一个版本的编号;然后用git reset --hard 版本号来回滚到任意节点
11、git reset --hard HEAD^ 或 git reset --hard HEAD~:将代码库回滚到上一个版本
git reset --hard HEAD^^:往上回滚两次,以此类推
git reset --hard HEAD~100:往上回滚100个版本
git reset --hard 版本号:回滚到某一特定版本
12、(git checkout — XX或)git restore XX:将XX文件尚未加入暂存区的修改全部撤销;并不是回滚到上一个历史版本,而是将工作区的内容回滚到暂存区中的版本,而如果暂存区没有任何内容,就表示头节点指向的这个版本
git restore --staged <file> 如果连暂存区中的都不想用了(staged就是暂存区),可以将文件从暂存区中删出来
因此,我们先 git restore --staged <file> 然后再git restore这个file,直接可以将这个file回滚到上一个版本
以上是关于 本地 的内容(将这些版本都存在了本地的 .git文件夹中);为了减少风险,将它们存到云端,以下是关于 云端origin 的内容
功能:“历史”中可以查看各版本的文件夹;点击“master”可以切换分支;克隆
13、git remote add origin git@git.acwing.com:xxx/XXX.git:将本地仓库关联到远程仓库(注意看这个@前面的就相当于前面ssh中的username,后面的就相当于ssh中的服务器ip地址或者域名)
14、git push -u (第一次需要-u以后不需要):将当前分支推送到远程仓库
git push origin branch_name:将本地的某个分支推送到远程仓库
15、git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下
以下是关于 分支 的内容
暂存区 与 分支没有任何关系,它与分支是独立的,也就是说不管是master分支还是dev分支都共用一个暂存区;commit时它是看你当前在哪个分支,然后加到哪个分支后面;切换分支不会有多个暂存区
16、git checkout -b branch_name:创建并切换到branch_name这个分支
17、git branch:查看所有分支和当前所处分支
18、git checkout branch_name:切换到branch_name这个分支
19、git merge branch_name:将分支branch_name合并到当前分支上
20、git branch -d branch_name:删除本地仓库的branch_name分支(比如用merge将dev分支合并到master上之后,就可以把dev分支删除了)
21、git branch branch_name:创建新分支
22、git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支
23、git push -d origin branch_name:删除远程仓库的branch_name分支
24、git pull:将远程仓库的当前分支与本地仓库的当前分支合并(先创建新同名对应分支,然后25,对应,再然后是pull合并,就和云端完全一样了)
git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并(然后本地就比云端多一个分支了)
25、git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应(因此,要先在本地创建一个对应的分支)
26、git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地
27、git stash:将工作区和暂存区中尚未提交的修改存入栈中
28、git stash apply:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素
29、git stash drop:删除栈顶存储的修改
30、git stash pop:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素
31、git stash list:查看栈中所有元素
git其他
注意github上默认主分支是main,而终端一般默认是master
git fetch是将远程仓库内容下载到 本地仓库,工作区不会有变化,git diff origin/main远程仓库名/分支名,就可以看到区别了
touch .gitignore然后在.gitignore中加上要忽略的文件(名字+后缀),比如sex.jpg,然后再git status就看不到图片未追踪提示了(注意不要随便用这个,因为如果一个文件加入到gitignore中了,在某一个分支中将它删除并且commit了,切换回另外一个分支它也不见了)
当非常确定删除一个分支时,d大写即可 git branch -D bad_boy
用 git remote -v 查看 本地仓库和哪些远程仓库有联系(因为刚从github远程仓库复制下来的,就会显示那个github远程仓库的地址)其中,origin表示远程仓库的名字
当要更新到远程仓库使用git push时,显示输入github的用户名密码然后显示出错了,因为2021年已经不支持直接通过账号密码的形式来push代码了,需要我们生成个人访问token
今天就讲到这里,下次争取一次给大家放完,然后开始蓝桥杯备赛之旅!!!!!!!!!!
1、git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中
2、git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中
3、git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
4、git add XX:将XX文件添加到暂存区
git add .:将所有待加入暂存区的文件加入暂存区
5、git rm --cached XX:将文件从仓库索引目录中删掉
6、git commit -m "给自己看的备注信息":将暂存区的内容提交到当前分支(也就是说在上一个节点上面再产生一个新的节点,同时HEAD指针移动到这个新的节点)(注意这个备注信息是很重要的)
7、git status:查看仓库状态
8、git diff XX:查看XX文件相对于暂存区修改了哪些内容
9、git log:查看当前分支的所有版本
git log --pretty=oneline可以显示成一行
10、git reflog:查看HEAD指针的移动历史(包括被回滚的版本)(也是从下往上看)
在代码库被回滚后就用reflog来查看指针的移动历史,可以看到每一个版本的编号;然后用git reset --hard 版本号来回滚到任意节点
11、git reset --hard HEAD^ 或 git reset --hard HEAD~:将代码库回滚到上一个版本
git reset --hard HEAD^^:往上回滚两次,以此类推
git reset --hard HEAD~100:往上回滚100个版本
git reset --hard 版本号:回滚到某一特定版本
12、(git checkout — XX或)git restore XX:将XX文件尚未加入暂存区的修改全部撤销;并不是回滚到上一个历史版本,而是将工作区的内容回滚到暂存区中的版本,而如果暂存区没有任何内容,就表示头节点指向的这个版本
git restore --staged <file> 如果连暂存区中的都不想用了(staged就是暂存区),可以将文件从暂存区中删出来
因此,我们先 git restore --staged <file> 然后再git restore这个file,直接可以将这个file回滚到上一个版本
13、git remote add origin git@git.acwing.com:xxx/XXX.git:将本地仓库关联到远程仓库(注意看这个@前面的就相当于前面ssh中的username,后面的就相当于ssh中的服务器ip地址或者域名)
14、git push -u (第一次需要-u以后不需要):将当前分支推送到远程仓库
git push origin branch_name:将本地的某个分支推送到远程仓库
15、git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下
以下是关于 分支 的内容
暂存区 与 分支没有任何关系,它与分支是独立的,也就是说不管是master分支还是dev分支都共用一个暂存区;commit时它是看你当前在哪个分支,然后加到哪个分支后面;切换分支不会有多个暂存区
16、git checkout -b branch_name:创建并切换到branch_name这个分支
17、git branch:查看所有分支和当前所处分支
18、git checkout branch_name:切换到branch_name这个分支
19、git merge branch_name:将分支branch_name合并到当前分支上
20、git branch -d branch_name:删除本地仓库的branch_name分支(比如用merge将dev分支合并到master上之后,就可以把dev分支删除了)
21、git branch branch_name:创建新分支
22、git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支
23、git push -d origin branch_name:删除远程仓库的branch_name分支
24、git pull:将远程仓库的当前分支与本地仓库的当前分支合并(先创建新同名对应分支,然后25,对应,再然后是pull合并,就和云端完全一样了)
git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并(然后本地就比云端多一个分支了)
25、git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应(因此,要先在本地创建一个对应的分支)
26、git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地
27、git stash:将工作区和暂存区中尚未提交的修改存入栈中
28、git stash apply:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素
29、git stash drop:删除栈顶存储的修改
30、git stash pop:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素
31、git stash list:查看栈中所有元素
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!