vscode中使用Git,结合Github

Posted 玩家_名狱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vscode中使用Git,结合Github相关的知识,希望对你有一定的参考价值。

一、git查看和修改所有配置

git config [<options>]

常用几个命令:

  • 查看系统配置 git config --system -l

  • 查看用户的全局配置 git config --global -l/--list

  • 添加用户的某个全局配置 git config --global --add user.email 2915713554@qq.com

  • 删除用户的某个全局配置 git config --global --unset user.email

要想使用git必须要配置两个变量东西:user.name 用户名和 user.email 邮箱

git config --global --list
	user.name=zhongxiaohang
	user.email=2915713554@qq.com

用户的全局变量保存在系统用户目录下的.gitconfig文件中

二、准备工作

先在Github新建一个仓库(Repositories),假设名为:gitlearn

然后在vscode中操作,安装 Git History(图形化查看历史) 和 Gitlens-Git supercharged 插件


三、初始化本地仓库(git init)

在本地新建一个目录作为工程目录,假设名字也叫gitlearn,然后在该目录下面使用命令初始化工程目录为Git仓库,使得能使用git服务。之后会在该目录下面生成一个叫.git的隐藏文件夹

git init

xx

.git文件夹内有如下文件

xxx


四、添加到缓冲区(git add xxx)

新建一个AAA.py文件,然后在里面写入内容,保存。此时我们在vscode中看到的是这样的

xxx

使用命令git add AAA.py把文件添加到缓冲区,之后看到的是这样的

xxx

这里只提交了一个文件。如果想提交当前目录下的所有文件,可以使用 . 号代表所有文件


五、提交到归档区(git commit)

git commit -m "参数-m代表添加注释"命令把缓冲区的内容提交到归档区

xxx

归档区用于做版本的控制


六、添加分支(git branch -M xxx)

我们是多人合作开发,为了区分每个人,通常仓库设置有多个分支,每个人拥有一个分支。这里指定配置当前为main分支

xxx


七、添加远程仓库(git remote add xxx xxx)

我们是协同合作开发,并且Git是一个分布式版本管理工具,本身算是一个节点,Github算是一个节点,其它合作开发者也算是一个节点。我们需要一个管理者,我们代码都提交到他哪儿去,由他解决审核问题和冲突问题。这里选择Github作为远程仓库,我们的代码提交到Github,

git remote add origin https://github.com/zhongxiaohang/gitlearn.git

xxx

指定远程仓库,将该远程仓库叫做origin,该仓库指向了某个地址

git remote -v 查看有哪些远程仓库

git remote remove origin 删除origin仓库

如果中途不想使用这个仓库了,要改变仓库地址:git remote set-url origin https://github.com/zhongxiaohang/test.git


八、提交到远程仓库(git push -u xxx xxx)

git push -u origin main

  • -u指定仓库地址,在添加远程仓库步骤中已经给出,这里直接使用远程仓库的名字即可
  • main代表分支

提交之后就可以在远程仓库中看到AAA.py了


九、登陆远程仓库

在Github中手动删除提交后的AAA.py文件,然后在本地的vscode中再次提交,失败,并提示登陆

xxx

点击登录以使用Github之后,跳转到浏览器,然后点击登录,就出现如下画面,然后复制蓝色框中的内容

xxx

然后回到vscode中,点击下框中的正在登陆到github.com,就会跳出一个框,把上一步复制的内容放入框中,然后按回车,就登陆成功了


十、拉取远程仓库进行同步(git pull --rebase xxx xxx)

如果远端库有修改,而本地库和远端库的内容有差别,那么push操作就会报错,使用命令进行同步

git pull --rebase origin main

同步本地库和远端库,保持两个库之间的文件一致。

origin指定远程仓库的地址,main代表分支

发现同步了远程仓库的操作之后,本地的AAA.py文件也被删除了

xxx


十一、查看操作日志(git log)

每次提交都会被记录,然后对应一次日志,之后可以通过该日志的标识版本号,恢复到当时的状态

git reflog 或者 git log

xxx


十二、回滚状态(git reset --mixed xxx)

git reset --mixed 版本号

恢复到提交文件的时候

xxx

–mixed:归档区和缓冲区都一起回滚,只改变状态,不会改变文件内容

  • git reset --mixed eb7ec7ce5a492fbb191846e5cf442b6628c606a3

–soft:只回滚归档区,回滚后使用git status命令查看状态会发现提示说某文件没有提交到归档区

  • git reset --soft eb7ec7ce5a492fbb191846e5cf442b6628c606a3

–hard:归档区、缓冲区和工作区都一起回滚,版本号只使用版本号哈希值的前7位,会改变文件内容,危险

  • git reset --hard eb7ec7c

然后点击符号,点击放弃更改,该文件就会恢复了

xxxx

虽然文件恢复了,但是我们依旧不能提交,因为我们的状态是处于第一次提交的状态,但是远程仓库删除AAA.py文件是第二次提交的状态,因为远程仓库和本地仓库不一致,所以不能提交,要想能提交,必须先使得本地的仓库和远程仓库一致,而一致之后本地的AAA.py 文件又没有了,这就互相矛盾了。这说明远程仓库的改动必须谨慎。


十三、删除某个状态(git revert xxx)

git revert 版本号

当提交过很多次,也就是有很多个版本,而想删除某个版本时,也就是想删除某一次提交的文件时使用该命令git revert eb7ec7ce5a492fbb191846e5cf442b6628c606a3

然而已发生的事情不可改变,所以并不会真正删除文件,而是再一次提交,提交中不包含要删除的状态。


十四、查看现在的状态(git status)

git status

git中的文件有四种状态

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

十五、分支(重点)

如果有多个人同时开发,每个人都有自己的提交(归档区)记录,当push到远程仓库时,由于第二个人push的内容和第一个人push的内容不同,那么第二个人push就会失败。所以使用多分支的的方式开发,每个人一个分支,开发完成后再手动合并到主分支上

1、查看所有分支(git branch -v)

git branch -v

处在哪个分支,哪个分支前面就有个*号

2、创建分支本切换到新分支(git checkout -b xxx)

git checkout -b liangzai

创建分支liangzai并切换到该分支,同时在之前分支哪个状态使用该命令,那么新建的分支所处的状态就是之前分支的状态

xxx

本地仓库创建的分支,如果远程仓库没有该分支,就不能直接提交到远程仓库,因此还要在远程仓库中创建同名的分支

xxx

3、切换分支(git checkout xxx)

git checkout main

切换回主分支,再次使用git branch -v命令查看

4、合并分支(git merge xxx)

git merge 某个分支

首先我们在main分支下创建一个BBB.php文件,然后提交到远程仓库

xxxx

切换到liangzai分支

xxx

然后在liangzai分支下新建一个CCC.go文件,然后同步远程仓库,再提交

xxx

在main分支下可以看到之前的BBB.php

xxx

切换到liangzai分支下

xxx

就能看到CCC.go还有main分支下的BBB.php

xxx

liangzai分支提交之后,在main分支中就可以合并liangzai分支了

xxx

即使在liangzai分支下也可以看到两个文件

xxx

此时在Github中的main分支下还没有CCC.go文件,因为我们还没有提交,提交之后就可以看到了

合并分支处理冲突

增加冲突

使用上一步合并的分支,然后在liangzai分支下修改BBB.php文件内容

xxx

切换到main分支,可以看到BBB.php文件的内容没有发生改变,只是在liangzai分支下改变,即使在liangzai分支下提交时没有报错,但是在Github中查看BBB.php文件时,都没有发生更改

xxx

xxx

此时在main分支下合并liangzai分支。之后提交即可,就可以在Github中的main分支中看到BBB.php文件修改后的内容了。划线处提示了修改的位置,只要main分支的管理员手动修改合并好代码,然后提交即可。

xxx

但是liangzai分支中没有修改,因为我们没有在liangzai分支下提交代码

xxx

此时只要在liangzai分支下提交即可

xxx

修改冲突

在liangzai分支下修改了BBB.php文件的第一行内容,然后切换到main分支下合并,如下图

xxx

删除冲突

过程和修改冲突的过程一致,只是这里是删除了第一行

xxxx

合并时可能多个分支都修改了同一个文件,就会发生冲突


十六、获取远程仓库的更新(git fetch)

git fetch

如果其它人先push到了远程仓库,导致本地本地仓库记录的远程仓库状态有差别,就会导致自己push失败,可以使用该命令获取远程仓库发生了什么改变。然后在本地的main分支下使用命令git merge origin/main命令合并远程仓库到本地的主分支上。

其实,上面的两个命令加起来相当于git pull --rebase origin main一个命令


十七、删除暂存区文件

有时在工程目录下的一些文件我们不能提交到仓库,如测试文件等。但是我们误使用git add .把所有文件都添加进暂存区了,此时我们想要删除一些文件

先创建新文件,然后添加到暂存区

xxx

然后删除暂存区的某个文件,可以发现A变成U了

xxxx

以上是关于vscode中使用Git,结合Github的主要内容,如果未能解决你的问题,请参考以下文章

Git创建/合并分支并提交到远程仓库(结合vscode)

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

Salesforce学习之路-developer篇利用VS Code结合Git开发Salesforce

如何用vscode的git功能往github上传代码