赞
踩
git下载地址:https://gitforwindows.org/
国内镜像网址:https://npm.taobao.org/mirrors/git-for-windows/v2.34.1.windows.1/
vscode下载地址:https://code.visualstudio.com/
一、基础操作
1、创建文件夹demo1
2、在文件夹内,右键git bash进行git config设置
git config --global user.name “你的用户名”
git config --global user.email “你的邮箱”
3、git init多一个.git文件夹
4、文件夹内进行操作
二、进行提交
(1)暂存更改->暂存区
git add .
暂存所有文件
或者git add 文件名.js
(2)提交更改->本地仓库
git commit -m "first commit"
可以add和commit合并写:git commit -a -m "完成xx操作"
或git commit -am "完成xx操作"
,但是如果一个文件是新增的还是需要使用 git add
命令
(3)推送更改
git push
如果本地创建了新分支,在推送更改到服务器时由于本地的新分支无法和服务器端的分支对应,会推送失败。可以在 push 时使用 --set-upstream 参数指定要推送到的服务器和分支名。
用法:git push --set-upstream 服务器名 新分支名
一般默认的服务器名称是 origin ,也可以自行改为其他名称。 比如我的项目一般会有两个远程地址,一个是 Github,名为 github,一个是码云,名为 gitee。如果管理远程服务器, 我们会在进阶操作-远程服务器管理中讲到。
(4)拉取新代码
git pull
三、其它操作
查看状态:git status
查看提交信息:git log
忽略文件:如果不想在git status提交记录里看到xx.jpg,创建.gitignore内容填xx.jpg就可以了
基于 git 强大的分支性能,实际工作中你的工作流可能是这样的:
你在开发某个项目,有了一个新需求,你需要创建一个分支,在这个分支中进行开发,但正在这个时候,你突然接到通知说线上有一个很严重的问题,需要立即修复。这时你将经历下面的流程:
(1)根据给你的 commitid 或分支名切换到线上版本对应的分支
(2)为这个问题新建一个分支,并在新分支中修复问题
(3)在测试通过后,切回线上版本对应分支,然后合并这个修复问题的分支并把改动推送到服务端。
(4)基于的修复问题后的代码重新发布版本,确认无误后把改动合并到主分支,并删除问题修复分支。
(5)切回你之前正在开发的需求分支,继续工作。
一、查看分支:
查看本地分支:git branch
查看全部分支,包含本地和远程:git branch -a
查看提交情况:git show 分支名|commitid|标签名
使用 git show 命令可以查看详细的提交情况,包括对应的分支、最后的 commitid、最后提交的作者和备注等信息,可以在出现 bug 时根据线上版本的 commitid 等信息查看最后一次提交的修改内容以便定位 bug 来源。
查看分支图:git log --oneline --graph --decorate --all
查看父分支:git reflog show
重新提交(将这次变更提交到上次记录,不修改commmit内容):git commit --amend --no-edit
git commit --amend -m "xxx"
当你还需要修改上一条commit的message时,就把—no-edit去掉, 加上 -m “xxx”,或者git commit --amend
然后i编辑也可修改。
二、新建和切换分支
创建分支:git branch login
(可以成功创建,但不会跳转)
git branch 分支名 commitid|分支名 (基于指定的commitid或分支名创建分支)
切换分支:git checkout login
创建新分支并切换分支:'git checkout -b login ’
基于分支login创建login-1:‘git checkout -b login-1 login’ (用作备份分支)
三、合并分支
切换主分支上后,git merge 分支1
(将分支1合并到主分支里)
在login分支里add和commit
切换master分支:git checkout master
git merge login (把别的分支合并过来)
四、冲突解决
如果有两个或两个以上分支修改了同一个文件,在合并分支的时候就会提交修改冲突。我们可以根据提示打开文件修改
CONFLICT (add/add): Merge conflict in 2
Auto-merging 2
Automatic merge failed; fix conflicts and then commit the result.
如图 1 中,提示在自动合并“2”这个文件时失败
<<<<<<< HEAD
222
=======
22222
>>>>>>> b2
查看文件内容我们可以看到当前分支的内容是 222,而来自 b2 分支的内容是 22222,我们可以把冲突文件的内容修改成我们需要的内容。然后使用 git add 和 git commit 重新提交就可以完成合并。
有时候如果冲突的内容过多,可能会存在有些冲突忘了处理就执行的提交操作,这样会让代码再现异常导致编译失败。为了防止这种情况出现,一般推荐在提交(commit)前使用 git diff
命令查看一下有哪些冲突的地方。
举例:
master在1.js第五行添加"1111"
git commit -am “111”
切换login分支:git checkout login
1.js第五行没有内容,此时添加"2222"
合并:git merge master会有冲突
上面:HEAD表示当前位置
下面:master第五行的内容
五、删除分支
git checkout master
删除分支:git branch -d login
(提示先合并)
使用 -d 命令可以安全的删除分支,在删除前 git 会检查该分支有没有合并过,如果还没有合并,在使用 -d 参数删除的时候会给出下面这种提示。
强制删除分支:git branch -D login
如果一个分支是你本地测试用的分支,并不需要合并到其他任何分支,可以使用大写的 -D 参数来删除分支
一、查看标签
查看本地标签:git tag
查看远程标签:git ls-remote --tags
如果你本地的项目标签比较多,还可以使用 --list 或 -l 参数来搜索指定的,比如下面的命令,可以查看所有以 v1.0 开头的标签。
-l 和 --list 作用完全一样, -l 是 --list 的缩写
git tag -l "v1.0*"
git tag --list "v1.0*"
查看远程标签时没有内置的参数用来过滤,不过我们可以使用 grep 来进行过滤输出的结果
只列表远程包含req的标签:git ls-remote --tags | grep req
二、创建标签
(1)轻量标签:git tag 标签名
(2)附注标签:
创建一个未签名的附注标签:git tag -a 标签名 -m 提交信息
使用默认键创建签名附注标签:git tag -s 标签名 -m 提交信息
使用指定的键创建签名的附注标签:git tag -u 键 标签名 -m 提交信息
三、推送标签到远程
默认情况下远程名一般是 origin
推送指定标签到指定远程服务器:git push 远程名 标签名。
推送全部标签到指定远程服务器:git push 远程名 --tags
四、删除标签
git tag -d 标签名
本地删除以后同步到远程服务器:git push 远程名 :refs/tags/标签名
直接删除远程标签:git push 远程名 -d 标签名
(1)还原已修改的文件
使用 restore:git restore 文件1 文件2
使用 checkout:git checkout – 文件1 文件2
(2)取消暂存的文件
git restore --staged 文件1 文件2
git reset HEAD 文件1 文件2
(3)覆盖上一次提交
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有 --amend 选项的提交命令来重新提交。
git commit -am "复了一些内容"
git commit -m "修复了一些内容" --amend
上面的命令执行后在 log 里面只会出现“修复了一些内容”这一条提交记录,不会出现“复了一些内容”。
(4)git reset:撤回 Commit
将当前 HEAD 重置为指定状态
git reset --soft【保留工作区,保留暂存区、修改版本库】
将 HEAD 引用指向给定提交。索引(暂存区)和工作目录的内容是不变的,在三个命令中对现有版本库状态改动最小。
git reset --mixed【保留工作区、修改暂存区、修改版本库】(git reset默认的模式)
HEAD 引用指向给定提交,并且索引(暂存区)内容也跟着改变,工作目录内容不变。这个命令会将索引(暂存区)变成你刚刚暂存该提交全部变化时的状态,会显示工作目录中有什么修改。
git reset --hard 【修改工作区、修改暂存区、修改版本库】
HEAD 引用指向给定提交,索引(暂存区)内容和工作目录内容都会变给定提交时的状态。也就是在给定提交后所修改的内容都会丢失(新文件会被删除,不在工作目录中的文件恢复,未清除回收站的前提)。
# 用法 git reset [选项] [要撤销的位置] # 撤销上一个commit,但不撤销add git reset --soft HEAD^ # 撤销到N个commit,但不撤销add git reset --soft HEAD~N # 撤销上一个commit和add,但不删除代码 git reset --mixed HEAD~1 # 撤销上一个commit和add并删除代码 git reset --hard HEAD^ # 撤回到指定commit git reset commitid
一、如果不小心回滚了,那么最近一次的提交可能都没了,这时候想要回到回滚之前:
(1)git log
查看提交时对应的版本号
(小提示,如果最后一行出现“:”,则输入wq退出回到命令行即可!)
(2)git reset --hard 版本号
就可以恢复了
提示,HEAD已经指向了t1,但你刷新后台时,发现并没有什么变化,这是因为我们还需要执行一下push,但这里需要注意的是,因为本地代码回到了旧版本,但远程仓库是新版本和本地不一致,所以你在用git push时会报错,这里我们需要使用强制提交,git push -f
,我们也可以使用git status查看当前状态。
补充:git reset和git revert区别
(1)reset是彻底回退到指定的commit版本,该commit后的所有commit都将被清除,包括提交历史记录,reset执行后不会产生记录;reset执行后无法再次恢复;reset执行后HEAD会后移。
优点:彻底回退到指定版本,干净清爽;提交时间线清晰,没有冗杂;缺点:记录彻底清除,无法再次恢复;
(2)revert,是撤销/撤回/反提交的意思。仅仅是撤销指定commit的修改,并不影响后续的commit,但所撤销的commit被后续的commit修改了同一地方则会产生冲突;revert执行后会产生记录;revert执行后因为不会清除记录,并且会产生新纪录,所以文件不会丢失,你可以多次执行revert恢复到某次改变之前的状态;revert的HEAD则一直是向前的
revert执行后会产生新的commit记录,是通过一次新的commit来恢复到之前旧的commit,但revert会保留恢复的该次提交后面的其它提交内容,假如后面的提交与要恢复的提交更改了同一地方,此时用revert就会产生冲突!
举例说明:
补充:rollback并不属于git命令,它的作用是,在文件或代码修改后,但还未commit,想恢复到与远程仓库代码一致的状态,便可以执行rollback操作!
借鉴笔记:https://www.jianshu.com/p/09a92b1af307
这里有一个例子可以帮助你理解“遴选cherry-pick”的重要性。假设你已经在一个分支上做了好几个提交,但你意识到这是个错误的分支!你现在该怎么办?你现在要做什么?要么在正确的分支上重复所有的变更,然后重新提交,要么把这个分支合并到正确的分支上。等一下,前者太过繁琐,而你可能不想做后者。那么,还有没有办法呢?有的,Git 已经为你准备好了。这就是“遴选”的作用。顾名思义,你可以用它从一个分支中手工遴选一个提交,然后转移到另一个分支。
我遇到的情况:在feature_b写着写着写多了代码,在commit后才意识到应该放到feature_a里,这时候切换到feature_a分支里。
第一步:把错误的commit遴选到正确的分支(copy)
git cherry-pick 提交的版本号
第二步:因为遴选的背后是copy,所以还需要删除掉错误分支上的commit;
用sourcetree:
(1)切换到feature_a分支
(2)选中提交错的commit节点,右键进行遴选即可(如果不修改commit信息的话可以在后面的提示中直接同意自动commit)
(3)因为commit是copy的,所以我们还需要把feature_b分支中的那个commit删除掉
(4)切换到feature_b分支
(5)选中要删除的commit节点的前一个节点,执行「重置」操纵,如下图
此操作是基于git reset命令的:
混合合并 --mixd:虽然commit被删除了,但其实改动还在,我们只需要丢失本地改动就好了
强行合并 --hard:那个commit直接就被丢弃了,不会像刚才那样,产生Uncommitted changes,还需要手动丢弃改动
软合并 --soft:这种介于「混合合并」和「强行合并」中间,即:改动还在,但你改动被 git add . 了
在feature_b写着写着写多了代码,在commit后才意识到应该放到feature_a(还未创建)里。
(1)git reset --soft HEAD^
,撤销commit,不撤销add
(2)git stash
//先将本地修改进行暂存
(3)切换dev分支里,合并feature_b,基于dev创建分支feature_a:git checkout -b feature_a
(4)将暂存的本地修改取出:git stash apply
然后再正常提交就可以了
切换到分支a
git rebase 新基:会把当前分支进行变基
git base master:把当前的分支a变基到master上
执行过变基以后, a 分支中的提交 c3 和 c4 被放到了执行时 master 的最新提交 c5 后面。正如“变基”其名一样, a 的基础被改变了。 a 在一开始的基础提交为 c2 ,变基后变成了 c5 。
git rebase 新基 目标分支
git rebase master a,可以处在任何分支进行此操作,自动切换到a分支并把a变基到master
需求:原本b在a分支基础上创建的,现在想要b分支脱离a,
git rebase --onto master a b 可以实现b分支里有master内容而没有a的内容
只需要执行上面的代码,你就可以把 master 分支以及 a 和 b 共同祖先之后的 b 里面存在但 a 里面不存在的提交放到 b 里面“重放”一遍,如果有冲突,处理一下冲突就可以搞定。
有冲突时变基进程会暂停,处理过冲突以后使用 git rebase --continue 继续执行变基,或者可以使用 git rebase --abort 取消操作。
慎用:
(1)会使团队代码变得混乱
1.你所变基的目标分支还有其他人在上面提交代码,他们再拉取得时候会造成混乱。
2.你们团队的提交模式不是直接提交,而是Pull Request。合并也会造成混乱
(2)会破坏分支间的关系
在使用merge整合代码后,查看提交图可以看到分支间的关系和分支创建时机。而经过变基以后,提交图会变成一条线,无法清楚的展示出各个分支间的关系。
(3)使用不当会毁掉整个分支内容
比如命令git rebase–onto ba bb ba1,如果在使用的时候把三个分支名的顺序给写错了,你可以把目标分支的内容给破坏掉。这个时候你就算再使用reset命令也无法还原到变基前的状态了。
在b站学习时看到一个评论,感觉面试问到的话可以这么说:
(1)git rebase就像在处理两根分叉的枝丫,先找到两根枝丫的分叉点,把一根枝丫从这个分叉点以后的部分复制一份,按照原本的顺序嫁接到另一根枝丫顶端。通过onto参数可以指定嫁接点(默认是枝丫顶端)。此外,通过参数,可以指定要复制哪一段枝丫(默认是分叉点后面那段开始到待复制枝丫的顶端)。最后,通过交互式操作(-i参数),可以对复制后的枝丫上的每一段(一段代表一个commit)进行更加精细化的操作,包括丢弃(drop)、调整顺序(调整todo list里的顺序)、几个合并成一个(squash)、编辑(edit)等等。还可以通过exec参数传一个固定操作(命令、脚本等)进去,每处理完一个todo项就执行下这个操作。假如复制的这段分叉里包含了merge commit,又想保留它(默认是会被抹平的),可以用参数–rebase-merges。特殊的情况是两个枝丫实际没有分叉,那rebase的时候表现会和merge有点像,already up-to-date或者发生快进式合并。
(2)所有rebase操作只为得到一个干净的提交记录,合入主分支以后不会产生merge提交
(3)rebase一般的公司都不许要求使用,虽然merge代码会产生额外节点但是可以保证代码可追溯,万一你这条分支上从分支点到你现在的head还有别人在开发,你rebase就炸了
(4)时间线混乱:参考看一下:https://juejin.cn/post/7178746173094625336
用gitee或者github:
(1)在远程仓库上创建好项目,把项目复制到本地
(2)本地创建好项目,推送到远程仓库
一、查看远程仓库
使用 -v 参数可以查看更加详细的信息。默认origin:git remote -v
还可以使用 show 命令来查看某个具体的远程仓库信息:git remote show 远程名
二、添加远程仓库
git remote add 名称 地址
三、推送分支到不同仓库
git push --set-upstream 远程名 分支名
四、重命名远程仓库
git remote rename 仓库名 新仓库名
把origin重命名为gitee:git remote rename origin gitee
五、删除远程仓库
git remote remove 仓库名
git remote rm 仓库名
(1)命令窗口下输入:ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
三次回车,即可生成 ssh key,一般都在c盘文件夹/用户/.ssh里
(2)打开id_rsa.pub复制,粘贴过去就可以了
ssh -T git@gitee.com
vue-test
git status
,发现需要先提交一下。git add .
把所有提交到暂存区。git commit -m "first commit"
,本地做一次提交,再次git status
,发现工作目录是干净的。git remote rm origin
删除关联的origin的远程库git remote add origin https://gitee.com/xxxxxx.git
git push -u origin master
,这样就推送到自己的仓库了。git push -u origin master
就可以了(5)远程仓库中点击刷新即可验证有没有上传成功。分支创建建议:
不要在master上面操作,创建一个和master并列的dev分支并推送到远程。
每个成员都在本地自己创建一个分支feature/lyt,记住此分支不推远程,完成代码后,先pull一下dev分支,再合并到dev分支,(这时可能会提示冲突,解决掉冲突再push)
如果两边都没有pull,晚push的就需要解决冲突才可以push
提交步骤:
步骤一、vscode终端输入
git status
开始写代码之前,一定记得创建分支:git checkout -b login
-b是创建子分支
查看所有分支:git branch
,打*
代表目前所在的分支。
git add .
放入暂存区
git status
git commit -m "完成了登录功能"
把暂存区的提交到了本地仓库中
git branch
查看分支
(git branch -b分支名字
删除分支)
步骤二、把login合并到master主分支
(1)切换到master分支
git checkout master
git branch
进行查看
(2)合并
git merge login
步骤三、git push
推送master到码云中(记得pull一下)
步骤四、码云现在只有master一个分支,把login也推送上去
git checkout login
git branch
git push -u origin login
分支第一次提交远程,-u origin提交到远端别名为login的分支
步骤二和四可以交换。
1.Github是一个代码/文件托管+保管+提交修改+评论修改的工具。
2.GitHub主要操作一:创建一个仓库。写过代码的朋友可以理解为一个项目,一个模块,一个主题。创建仓库需要指定用户,仓库名,保密性,开源协议。
3.Github主要操作二:上传文件或者文件夹。点击add file添加空文件或者上传若干文件,表示文件夹,文件夹不可为空。
4.Github主要操作三:贡献操作之提交疑问或者描述和总结(Issues)。基于查看过代码仓库的前提提交问题和提交说明,仓库创建者有权利关闭问题并和网友评论问题以及添加标签。
5.Github主要操作四:贡献操作之提交更改(Pull Requests)。你看了人家仓库的东西觉得有地方需要改进,那就别只会比比,把东西改了给人加到仓库里合并,顺便添加描述。
6.Github主要操作五:白嫖(clone)!!!仓库可以公开可以私有,只要是遵循开源协议的公开仓库代码你都可以拿去用,但是不同的开源协议要求不同,所以自己再怎么学习也无所谓,但是你拿去商用那就小心点吧。
7.Github主要操作六:版本管理功能。写一堆拉基代码没法用想回退版本,就是干这个的,给你后悔的机会。
8.Github主要操作七:学会搜索资源。什么入门的,中文的,最牛逼的,最火的,跟学会百度一个道理。
点击新建仓库–>填写项目名称、描述、公共–>点击creating respository–>第二个是把建好的仓库上传上去 直接复制粘贴下面命令就可以了。
添加远程仓库:git remote add origin 地址
本地仓库改名:git branch -M main
上传代码:git push -u origin main
修改:
推送当前分支最新的提交到远程:git push
拉取远程分支最新的提交到本地:git pull
两边都修改:先拉到本地再推到远程
基本概念
三个概念:提交commit、仓库repository、分支branch
github里面:
(1)时间图标:commits提交次数,点击后可以查看代码修改情况:红的以前的 / 绿的新改的
(2)issues问题:相当于一个论坛,提问题用,回答完就可以close掉。
(3)看别人的github项目5点:git clone、star、README.md、issue、LICENSE
安装运行git 其中选择默认vscode作为编译器,一路next即可。
右键运行git bash–>输入命令git --version
复制git地址(code 里面)–>找到要下载到的目录右键git bash–>输入命令git clone <git地址>
与下载zip直接解压区别:clone有隐藏的.git文件夹,这样的叫「仓库」,而解压的没有,解压的「文件夹」需要git初始化才能变成仓库
zip需要初始化:打开解压的文件夹–>右键git bash -->git init–>可以看到文件夹里多了.git
找开源项目的一些途径
• https://github.com/trending/
• https://github.com/521xueweihan/HelloGitHub
• https://github.com/ruanyf/weekly
• https://www.zhihu.com/column/mm-fe
特殊的查找资源小技巧-常用前缀后缀
• 找百科大全 awesome xxx
• 找例子 xxx sample
• 找空项目架子 xxx starter / xxx boilerplate
• 找教程 xxx tutorial
安装vscode:选择附加任务全选,安装Git lens插件、git history diff
第一次提交
提示登录:
git config --global user.email "you@example.com"
git config --global user.name "youname"
查看提交的历史记录:
方法一:git log --stat
(–stat 可以展开)
方法二:更常用(vscode中):点击COMMITS就可以查看
维护项目的日常:
未提交:工作区回滚:git checkout
提交后:撤销最后一次提交:git reset HEAD^1
或者 在COMMITS找到要回滚的提交,右键–>undo commit–>暂存的更改里就会出现–>点击—
号,
更改里出现点击撤回
或者直接找到修改前的复制一下,粘贴到现在的。
分支:修改互不影响
以当前分支为基础新建分支:git checkout -b <branchname>
列举所有的分支:git branch
单纯地切换到某个分支:git checkout <branchname>
删掉特定的分支:git branch -D <branchname>
合并分支:git merge <branchname>
放弃合并冲突的操作:git merge --abort
克隆仓库:git clone <git地址>
初始化仓库:git init
添加文件到暂存区:git add -A
把暂存区的文件提交到仓库:git commit -m <"提交信息名称">
查看提交的历史记录:git log --stat
工作区回滚:git checkout <filename>
撤销最后一次提交:git reset HEAD^1
以当前分支为基础新建分支:git checkout -b <branchname>
列举所有的分支:git branch
单纯地切换到某个分支:git checkout <branchname>
删掉特定的分支:git branch -D <branchname>
合并分支:git merge <branchname>
添加远程仓库:git remote add origin 地址
本地仓库改名:git branch -M main
上传代码:git push -u origin main
推送当前分支最新的提交到远程:git push
拉取远程分支最新的提交到本地:git pull
在 setting.json(可通过 ctrl + P 搜索)
之前的命令是"terminal.integrated.shell.windows": “C:\Windows\System32\cmd.exe”
此项已弃用,配置默认 shell 的新推荐方法是在 #terminal.integrated.profiles.windows# 中创建一个终端配置文件,并将其配置文件名称设置为 #terminal.integrated.defaultProfile.windows# 中的默认值。此操作当前将优先于新的配置文件设置,但将来会发生更改
现在使用以下命令:
默认的话,最后添加"terminal.integrated.defaultProfile.windows": “Bash”
然后重启 vscode 即可
点开分支管理发现没有 file histroy/commits 之类的增强功能,需要安装 vscode 插件 Gitlens
使用git 添加远程github仓库的时候提示错误:
fatal: remote origin already exists.
先删除远程git仓库 git remote rm origin
再添加
git push -u origin main
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
需要配置一下ssh。
Please make sure you have the correct access rights and the repository exists.
从github主页点击设置进入SSH and GPG keys,随后点击创建一个新的密钥"New SSH key",找到需要上传的项目文件夹的根目录,右键Git Base Here,
输入命令:ssh-keygen -t rsa -C “you@qq.com”
然后便一直猛击回车,有y/n的时候尽可能去翻译一下句子,这个y/n就是已经创有文件项目是否覆盖的意思。接下来经过回车敲击后可以看到一个代码小图片,那就说明成功了。如果打开文件夹里没有.pub,用管理员身份运行“命令提示符,之后重新使用“命令提示符”来生成ssh-key
接下来git bash输入命令:cat ~/.ssh/id_rsa.pub
这个时候他便会弹出你的密钥。这个时候直接复制粘贴到刚刚那个GitHub设置密钥SSH的key上面然后保存即可。
与gitee和github搭配使用,提高效率。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。