当前位置: 首页 > Web前端 > HTML

必须知道的git基本命令和常见问题

时间:2023-03-28 15:30:49 HTML

拉取和上传文件的基本命令

0.克隆在线库存地址;gitclone-bdev(remotebranch)link2.gitadd要提交的文件或文件夹或gitadd。(意思是提交所有修改过的文件,并添加到暂存区)注意:gitadd只添加新的或修改过的文件到索引区。(删除的文件不会添加)3.gitcommit-m'备注';提交到暂存区-m(默认是master分支)/跳过检查提交:gitcommit--no-verifycommit-m'Comments'3.gitpush;正式提交4.gitlog查看提交日志或者gitlog--pretty=oneline查看更清楚5.关联远程分支:(1)gitbranch--v查看关联关系(2)关联远程分支:gitbranch--set-upstream-to=origin/远程分支名称本地分支名称ps:关联远程库后,使用命令gitpush-uoriginmaster第一次推送master分支的所有内容时间;或者:gitcheckout-b本地分支名origin/远程分支名创建一个本地分支,并自动关联远程分支之后,每次本地提交后,只要有需要,都可以使用命令gitpushoriginmaster推送最新的修改;Git跟踪修改,每次如果不使用gitadd到暂存区,就不会添加到commit中。使用gitdiffHEAD--qq.html命令查看工作区最新版本与版本库的区别

常用基本命令

1.在使用gitdiff提交文件之前,可以使用这个命令查看哪些文件被修改了2。gitlog上传文件后,可以查看提交的历史信息。gitlog--pretty=oneline--abbrev-commit查找历史提交的commitid。gitlog--graph查看分支合并图。或者gitlog--graph--pretty=oneline--abbrev-commit3.gitreset--hardHEAD^回滚到之前的版本--hard4。gitreset--hard09BH(历史版本的十六进制前四位如果关闭git窗口,可以使用gitreflog命令查看提交的版本gitrebase--ontocbe8527^cbe8527删除某次提交5.catop.html或gitshowview文件内容5.gitcheckout--qq.html或gitrestoreop.html撤销对工作区中qq.html文件所做的所有修改这里有两种情况:(1)一种就是qq.html放到暂存区之后就没有修改过,现在撤销修改,会回到和版本库一样的状态;(2)一个是qq.之后的状态添加到暂存区6.gitdiffHEAD--qq.html查看工作区中最新版本与版本库的区别7.gitresetHEAD可以撤销暂存区的修改),放入回到工作区,gitresetHEAD--。撤消所有gitresetHEAD--filename撤消特定目标gitrm-cachedfilepath从缓存中删除文件8.gitreflog查看命令历史以确定要返回到哪个未来版本。9.gitrmqq.html删除文件gitrm-rcss/删除文件夹10.gitremote查看远程库信息或使用gitremote-v显示更详细的信息11.gitpushorigindev(分支名)pushcorrespondenceBranch但是,本地的branch没有必要push到remote,那么哪些branch需要push哪些不需要呢?master分支是主分支,所以必须时刻与远程同步;dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要和远程同步;bug分支只是用来修复本地的bug,所以没必要push到Remote,除非老板想看你每周修了多少bug;feature分支是否推送到远程就看你有没有和小伙伴合作在上面开发了。12.gittagv1.0(versionnumber)为项目做一个版本号(tag)gitpushorigin--tags把本地没有推送的tags全部推送到远程gittag-dv0.9删除先从本地打tag然后gitpushorigin:refs/tags/v0.(删除一个远程tag)命令gittag用来新建一个tag,默认是HEAD,也可以是commitid指定的;命令gittag-a-m"blablabla..."可以指定标签信息;命令gittag查看所有标签13.gitcommit--amend修改上次commit的注释https://www.jianshu.com/p/098d85a58bf1

分支及基本处理

1.gitcheckout-bdev创建dev分支,然后切换到dev分支或者gitswitch-bdev-b参数表示创建和切换,相当于这两条命令:gitbranchdevgitcheckoutdev2.gitbranch查看当前Branch;查看已有的本地和远程分支:gitbranch-a3.gitmergedev将子分支合并到主分支master。第二种合并是“快进模式”,即master直接指向dev的当前commit,所以合并速度非常快。总结:Git鼓励大量使用分支:查看分支:gitbranch创建分支:gitbranch切换分支:gitcheckout或gitswitch创建+切换分支:gitcheckout-b或gitswitch-c拉取远程分支:gitfetchorigindev(dev为远程仓库的分支名)合并一个分支到当前分支:gitmerge删除本地分支:gitbranch-d;删除远程分支:gitpushorigin--deletedev

常见问题处理

1.远程仓库在本地gitrm文件后还有这个文件吗?$gitadd-u将只处理修改或删除的文件,但不会处理新创建的文件$gitcommit-m"deletetest"$gitpush2.Handlecommonmergebranchconflicts图上含义:encodingqe.htmlconflicts(Content):Auto-mergefailedwithmergeconflictsinq.html;修复冲突,然后提交结果。Git告诉我们qe.html文件有冲突,必须手动解决冲突再提交。Git状态也可以告诉我们有冲突的文件;(1)gitlog--graph--pretty=oneline--abbrev-commit查看分支的合并状态(2)手动将与Git合并失败的文件编辑成我们想要的内容,然后提交。(3)删除feature1分支3.gitadd等无法操作文件?4.Git运行时突然显示:另一个git进程提示正在这个仓库中运行,e.g.由“gitcommit”打开的编辑器。请确保所有进程都已终止,然后重试。如果还是失败,一个git进程removethefilemanuallytocontinue...翻译的意思是git被别的程序占用了,重启机器也解决不了。原因是Git在使用过程中遇到了crash,部分锁定的资源没有释放。解决方法:进入项目文件夹下的.git文件(显示隐藏文件夹或rm.git/index.lock),删除index.lock文件。gitcommit时的错误处理提示:husky>pre-commit(nodev12.18.3)?你的一些任务使用`gitadd`命令。请从配置中删除它,因为任务所做的所有修改都会自动添加到git提交索引中。解决方法:删除或重命名.git>hooks>pre-commit文件进入hooks文件夹,找到pre-commit文件,这是导致commit失败的根本原因。这个文件的作用是:一个预提交(客户端)钩子,它会在Git输入提交信息之前运行代码风格检查。如果代码不符合相应规则则报错。我们删除文件后,再commit,发现可以提交成功了。gitmergebranch出现warning:couldnotopendirectory'xxx':Permissiondenied...解决方法:这个错误说明没有权限操作该文件,关闭编辑器和coderunner即可

分支管理策略

通常,在合并分支时,Git会尽可能使用Fastforward模式,但在这种模式下,删除分支后,分支信息会丢失。如果要强制关闭Fastforward模式,Git在合并的时候会生成一个新的commit,这样就可以从分支历史中看到分支信息。下面是--no-ff模式下的gitmerge:1.创建并切换分支gitswitch-cdev2.修改文件,提交新的commitgitaddqe.htmlgitcommit-m'changeqe.html'3.切换回master主分支gitswitchmaster4.准备合并dev分支,注意--no-ff参数,表示禁用Fastforward:$gitmerge--no-ff-m"mergewithno-ff"dev这种merge方法会在master分支上创建一个新的commit节点来完成合并。5.因为这次merge会创建一个新的commit,所以加上-m参数,把commit的描述写进去。合并后,我们使用gitlog查看分支历史:$gitlog--graph--pretty=oneline--abbrev-commit分支策略在实际开发中,我们应该按照几个基本原则来管理分支:branch应该是很稳定的,就是只用来发布新版本的,平时不能在上面工作;那你在哪里工作?工作都在dev分支,也就是说dev分支是不稳定的。在某个时候,比如1.0版本发布时,dev分支会合并到master分支,1.0版本会在master分支上发布;你和你的朋友们,每个人都在dev分支上工作,每个人都有自己的分支。时不时的合并到dev分支就好了。合并分支时,可以使用普通模式加上--no-ff参数进行合并。合并历史是有分支的,可以看到合并已经完成,但是快进合并看不到合并已经完成。

Bug分支

在团队合作中,Bug是连续的,因此每个Bug都可以通过一个新的临时分支来修复。修复后,合并分支,然后删除临时分支。如果现在有错误,让我们这样做:。1.gitstash先存放你当前分支的内容,待会恢复站点后继续工作;2.gitswitchmaster切换到主分支,准备创建bug分支(issue-101);3.gitswitch-cissue-101创建bug分支(issue-101);4.gitaddqe.htmlgitcommit-m"fixbug101"修改bug并提交5.修复完成后,切换到master分支,完成合并,最后删除issue-101分支:git切换主机;gitmerge--no-ff-m"mergedbugfix101"issue-101gitbranch-dissue-1016.bug已经修复,现在是时候回到dev分支Livegitswitchdevgitstashlist查看之前存储的内容:stash@{0}:WIPondev:f52c633addmerge7.现在需要恢复存储的内容,有两种恢复方式:(1)使用gitstashapplyrecovery,但是之后recovery,stash内容没有被删除,需要使用gitstashdrop来删除(2)使用gitstashpop,recovery的同时删除stash内容,然后用gitstashlist查看,不会看到any可以多次存储stash的内容。恢复的时候,先用gitstashlist查看,然后用命令恢复指定的stash:gitstashapplystash@{0}8.修复master分支的bug后,我们需要思考一下,dev分支之前是从master分支分支出来的,所以这个bug其实存在于当前的dev分支上。那么如何在dev分支上修复相同的错误呢?重复操作一次,提交?同样的bug,要在dev上修复,我们只需要将commit4c805e2fixbug101所做的修改“复制”到dev分支即可。注意:我们只想复制commit4c805e2fixbug101所做的更改,而不是合并整个master分支。为了方便操作,Git专门提供了一个cherry-pick命令,可以让我们复制一个特定的commit到当前分支:gitbranch*devmaster$gitcherry-pick4c805e2[master1d4b803]fixbug1011filechanged,1次插入(+),1次删除(-)Git自动提交到dev分支。注意这次commit的commit是1d4b803,和master的4c805e2不一样,因为两次commit只是相同的改动,但确实是两次不同的commit。使用gitcherry-pick,我们不需要在dev分支上手动重复bug修复过程。总结:修复bug时,我们会新建一个bug分支修复,然后合并,最后删除;当手头的工作没有完成时,先gitstash工作现场,然后去修复bug,修复之后再gitstashpop,回到工作现场;master分支上修复的bug,如果想合并到当前dev分支,可以使用gitcherry-pick命令将bug提交的修改“复制”到当前分支,避免重复工作。

Featurebranch

添加新功能时,为了不打乱主分支master,我们在当前分支(dev)上新建一个分支1.gitswitch-cfeature-1新建一个分支并写入函数2.gitadd3.gitcommit-m'feature-1'4.切换回dev,准备合并gitswitchdev如果合并时这个函数不适用,需要删掉,怎么办去做吧?如下:gitbranch-dfeature-1报错:error:Thebranch'feature-1'isnotfullymerged。如果您确定要删除它,请运行“gitbranch-Dfeature-vulcan”。破坏失败。Git好心提示feature-1分支还没有合并。如果删除,则修改将丢失。如果想强行删除,需要使用大写的-D参数。.现在我们强行删除:gitbranch-Dfeature-1tosuccess

teamcollaboration

1.抢分支:参考https://www.liaoxuefeng.com/w...