赞
踩
以前都是用sublime,最近开始使用vscode(v1.50.0),写一些心得记录一下
TabNine这个插件,如果电脑配置ok,可以装一下(现在已经开始收费了…)
1.代码提交
3/4/5操作都在项目名称后面的三个小点里
疑问:
目前常用的防止冲突的提交方法是:要先commit,然后pull,然后再push,为什么要这样操作呢?
答:这个先 commit 再 pull 最后再push 的情况就是为了应对多人合并开发的情况,
commit 是为了告诉 git 我这次提交改了哪些东西,不然你只是改了但是 git 不知道你改了,也就无从判断比较;
pull是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操作进行对比的,如果同时操作了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来,这个时候就需要先看看怎么保留代码了,然后再 git add && git commit && git pull 这三连,再次 pull 一次是为了防止再你们协商的时候另一个人给又提交了一版东西,如果真发生了那流程重复一遍,通常没有冲突的时候就直接给你合并了,不会把你的代码给覆盖掉
出现代码覆盖或者丢失的情况:比如A B两人的代码pull 时候的版本都是1,A在本地提交了2,3并且推送到远程了,B 进行修改的时候没有commit 操作,他先自己写了东西,然后 git pull 这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push 那么在远程版本中就是4,而且 A 的代码被覆盖了,所以说所有人都要先 commit 再 pull,不然真的会覆盖代码的
2.解决代码冲突问题
pull代码有冲突怎么办,可能会提示以下信息:
error: Your local changes to ‘c/environ.c’ would be overwritten by merge. Aborting.
Please, commit your changes or stash them before you can merge.
这个意思是说更新下来的内容和本地修改的内容有冲突,先提交你的改变或者先将本地修改暂时存储起来。
解决方案如下:
1.先将自己修改的内容存储到暂存区 git stash
Vscode操作方法:源代码管理 –> 更改 -> 点击右侧加号 “+”(暂存更改)
2.然后拉取代码 git pull
3.还原暂存的内容 git stash pop 此时会提示类似以下信息
“Auto-merging c/environ.c
CONFLICT (content): Merge conflict in c/environ.c
”
意思就是系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突。
4.解决文件冲突的部分
打开冲突的文件,会看到类似如下的内容:
git冲突内容
其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed changes之间的内容就是本地修改的内容。碰到这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容。可以‘采用当前修改’或者其他
解决完成之后,就可以正常的提交了。
3.创建新分支
1.新建分支
git branch 分支名
2.切换分支
git checkout 分支名
3.进行项目上传
git add .
git commit -m “提交的信息”
git push -u origin 分支名
通过vscode创建新分支:
1.选中要创建新分支的模块,点击左下角分支管理
2.在弹出的框内选择 “从…创建分支”
3.输入新分支名称,回车
4.再从弹出的框内选择源分支(个人理解:从这个源分支上再拉出来一个分支,即创建新分支,那么就会在这个源分支的基础上进行开发)
5.点击模块 “同步更改” 按钮(此时会变成一个云朵的图标,创建之前就类似刷新的那个图标)
6.本地和远程仓库就都会生成这个新分支,可以开始开发了
4.修改分支的名称
需要将分支name_old修改为name_new,执行如下步骤:
1.执行命令git checkout name_old切换到name_old分支,如果已经在这个分支下,可以不执行此步骤
2.执行命令git pull origin name_old将代码更新到和远程仓库一致
3.执行命令git branch -m name_old name_new将本地仓库的name_old的名称修改为name_new
4.执行命令git push origin --delete name_old将远程分支name_old删除
5.执行命令git push --set-upstream origin name_new将本地分支push到远程仓库
5.将分支代码合并到master上(其他分支同样适用)
假如当前分支名称为 test
1、首先在test分支上进行
git add .
git commit -m “test”
git push
2、切换到master上
git checkout master
git merge test
git push
6.git/gitlab新建远程分支后 vscode里看不到 (新建分支更新)
更新新的分支 命令如下:
项目根目录执行 git remote update origin --prune
7.git/gitlab切换到别的分支,暂时保存当前分支的修改(不进行add 和commit)的方法
正在开发一个项目的B分支,但是A分支发现一个bug需要处理,但是又不想把B分支的修改提交上去怎么办?
1.在B分支执行 git stash
这个时候就把B分支的修改内容暂时储存到本地了
(实际上本地有一个存储列表,可执行 git stash list 查看,刚才的存储内容其实就在列表的最后一项,如果这个时候执行 git stash pop 就会把刚才存储的内容恢复)
(注意:1. git stash 不存储新增的文件夹及文件,只存储修改过的、已删除的文件夹及文件;2.执行完 git stash 操作之后,不要执行pull操作,这里是我踩过的坑,因为有可能出现这种情况:你存储的文件里面,有一个文件被别人修改了,被提交到远程库里了,这个时候你pull到的就是别人修改过的内容,此时你再执行 git stash pop 操作就会报错,大概意思就是:你本地的文件已被修改过了,和stash的文件内容不一致,无法pop,请commit本地文件之后再操作)
2.如果A分支处理好了,切到B分支,再执行 git stash pop ,之前修改过的内容就恢复了
8.git上传如何忽略node_modules
在项目的根目录,右键选择 Git Bash 进入命令行;
在命令行输入:
touch .gitignore
在生成的.gitignore文件里输入你要忽略的文件件及其文件即可。
node_modules/ 表示过滤这个文件夹
*.zip 过滤zip后缀文件
demo.html 过滤该文件
配置规则:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符;
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录。
git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效。
9.解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).
错误可能是因为在你以前pull下来的代码没有自动合并导致的.
解决办法一:保留本地的更改,中止合并 -> 重新合并 -> 重新拉取
$:git merge --abort
$:git reset --merge
$:git pull
解决办法二:舍弃本地代码,远端版本覆盖本地版本(慎重)
$:git fetch --all
$:git reset --hard origin/master
$:git fetch
通常情况下方法一用到的最多
Git fetch和git pull的区别:
都可以从远程获取最新版本到本地
1.Git fetch:只是从远程获取最新版本到本地,不会merge(合并)
2.Git pull:从远程获取最新版本并merge(合并)到本地
实际工作中,可能git fetch更好一些, 因为在merge前,可以根据实际情况决定是否merge
参考以下链接:
http://stackoverflow.com/questions/11646107/you-have-not-concluded-your-merge-merge-head-exists
http://yijiebuyi.com/blog/5b55eb51ad49ce41e2de9c85dd4513ca.html
http://blog.csdn.net/hudashi/article/details/7664457
10.git Submodule Update 报错
报错:
git.exe submodule update --progress --init – “xxxxxx”
error: pathspec ‘xxxxxx’ did not match any file(s) known to git
意思是:
git.exe 子模块更新 --progress --init – “xxxxxx”
错误:pathspec ‘xxxxxx’ 与 git 已知的任何文件都不匹配
解决方案
控制台执行 git submodule add -f http://xxx/xxx/xxx.git src/utils
然后执行 git submodule init
其中:
git submodule add -f 模块在代码库里的地址 模块在项目本地的路径
11.git 两分支之间部分文件合并
A 分支上有 a\b\c 三个文件需要合并到 B 分支上
执行 git checkout B 切换到 B 分支上
执行 git checkout A a的路径 b的路径 c的路径
B 分支里面就可以看到已合并
12.获取远程分支信息
如果分支信息显示不全或者不显示,执行这个命令拉取分支信息
git remote update origin --prune
13.将主干代码同步到子分支上
两种操作方式,任选其一即可:
一、通过命令行执行
1.切换到本地的仓库,更新为最新的代码。
2.切换到要同步的子分支上。
3.在子分支上运行 git merge master 就会将主分支的代码同步到子分支上。
二、通过vscode操作
1.切换到本地的仓库,更新为最新的代码。
2.切换到要同步的子分支上。
3.选择 “分支 -> 合并分支”,如图所示:
4.从弹出的窗口中选择 master 即可,如图:
14.vscode git 拉取时 提示:在签出前,请清理存储库工作树
有两种方法解决:
一,手动解决
1、git stash (这一步的作用是把当前未提交的修改暂存起来,让仓库还原到最后一次提交的状态。)
2、git pull (拉取远程仓库的代码,让你现在的代码和远程仓库一致)
3、git stash pop (恢复第一步储存起来的代码,也就是恢复当前未提交的修改)
二、放弃本地修改,直接覆盖(一般情况下不建议这样)
1、git reset --hard
2、git pull
15.git撤销提交
一、Git撤销上次提交指令
Git撤销上次提交可以使用以下两个命令:
git reset HEAD~1
git reset --soft HEAD~1
其中,git reset HEAD~1会将HEAD指向上一个提交,即将最新的提交撤销掉,并且撤销后的修改全部放回工作区。而git reset --soft HEAD~1则不会将修改放回工作区,而是将修改保留在缓存区。
二、Git撤销上次提交记录
如果需要撤销多次的提交记录,可以使用以下命令:
git reset HEAD~n
其中,n表示要撤销的次数。其实现原理和上一个小标题所述的命令类似,只是多撤销了几次提交记录。
三、Git撤销上次提交的代码
如果只需要撤销某个提交记录中的某个文件(或者几个文件)的修改,可以使用以下命令:
git reset HEAD filename
其中,filename是需要撤销修改的文件名。
四、Git如何撤销上次提交到缓存区
如果上次提交已经放到了暂存区(缓存区),那就需要用到以下命令:
git reset HEAD
这个命令会将缓存区的修改全部撤销掉并且放回工作区。
五、Git撤销上次提交删除的文件
如果上次提交将某个文件删除,而现在需要恢复它,可以使用以下命令:
git checkout HEAD filename
这个命令会从HEAD指向的提交中获取filename文件的最新内容,并将其放到工作区中。
六、Git撤销commit命令
如果只是需要撤销commit命令,而不需要撤销上一次的修改,可以使用以下命令:
git reset --soft HEAD^
这条命令将会把当前HEAD指向的commit撤销掉,但是保留所有修改到暂存区。
七、Git撤销提交
如果通过git add将修改加入暂存区,但是没有提交,可以通过以下命令将修改撤销回来:
git reset HEAD filename
其中,filename是需要撤销修改的文件名。
八、Git撤销某次提交
如果需要回退到某个提交,可以使用以下命令:
git reset commit_id
其中,commit_id是需要回退到的提交的ID号。
九、Git撤销本地提交
如果在本地库中已经提交,也可以使用以下命令将修改撤销回来:
git revert commit_id
其中,commit_id是需要被撤销的提交ID号。这个命令会创建一个新的提交,撤销之前的提交。
十、Git清除本地缓存(如果.gitignore文件不生效,可参考此项)
.gitinnore文件不生效原因:原因是因为在git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的,
这时候我们就应该先把本地缓存删除,然后再进行git的提交,这样就不会出现忽略的文件了。
git rm -r --cached .
**注意:**如果出现某某具体文件的HEAD指针有问题;则需要先移除此文件;
git rm --cached -f 文件路径
再进行重新执行上面的删除缓存操作命令;
然后执行 git add . 和 git commit -m ‘’
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。