Git实操
环境准备
- 操作系统: Linux,Windows,MacOS(本文以Linux为教程)
- 安装Git
sudo apt-get update
sudo apt-get install git
git --version

常用指令介绍
Linux创建目录&&并进入目录
mkdir -p hellogit
cd hellogit

设置git的用户与邮箱(必须设置!!!)
git config --global user.name "tungchiahui"
git config --global user.email tungchiahui@gmail.com
git初始化(使该文件夹被git控制)
git init

创建文件&&查看当前文件夹内的所有文件
touch test.md
ls

编辑文件文本内容
sudo apt-get update
sudo apt-get install vim
vim ./test.md

接下来按键盘上的insert按键进入编辑模式&&并输入一段文本

按ESC退出编辑模式

按shift+冒号按键,并输入wq回车进行保存退出

查询当前文件的状态
git status

On branch 分支名
Untracked是指文件在工作区
将文件提交到暂存区
git add test.md

将文件提交至本地仓库
git commit -m "version1"
#git commit -m "提交的信息(可以理解为是注释)"

查看已经提交的项目版本
git log

这几行的意思是tungchiahui(邮箱为tungchiahui@gmail.com)用户于2023年12月30日周六00:42:47往master分支提交了注解为"version1"的项目版本
可以尝试对文件内容进行修改,并再次进行提交
vim test.md
git add test.md
git commit -m "version2"
git log


如何忽略掉不想提交的文件
- 首先创建一个文件.gitignore
- 再创建一个文件 绝密文件不想开源.py 并修改里面的内容
- 查看git状态
touch .gitignore
touch vinci_secret.py
vim vinci_secret.py
git status


- 修改.gitignore的内容,将不想被提交的文件名写入该文件
vim .gitignore
git status


分支基本操作
- 分支的作用:开辟项目的一个新仓库分支,与master等其他分支是独立的,可以进行独立的add、commit和diff、clone。
- 创建分支
git branch route2
#git branch 分支名
- 进入分支
git checkout route2
#git checkout 分支名
- 查询有多少分支,并查询目前为哪一个分支
git branch

当前分支文件会完美继承master分支的文件
- 删除掉该分支下的文件
ls
rm -rf test.md
rm -rf vinci_secret.py
ls

- 将该分支往本地仓库进行提交
git commit -a -m "删库跑路"
#该指令是把git add和git commit指令一起写

- 查看分支是否对其他分支有影响(切换到其他分支查看影响)
git checkout master
ls

可以发现,在route2分支中被删掉的test.md文件回来了,但是同样被删掉的vinci_sercet.py文件没回来,是因为该文件在提交时被.gitignore文件屏蔽了,不会被提交到本地仓库
- 删除分支
git branch -D route2
#git branch -D 分支名

- 创建分支并立马切换到分支
git checkout -b route3

分支的合并
- 在route3分支中修改文件内容并提交
vim test.md
git commit -am "route3 version3"
#-a -m也可以被省略成-am


- 切换到master分支
git checkout master
vim test.md

- 将route3分支合并到当前分支上
git merge route3
#git merge 被合并的分支名
vim test.md


分支合并的冲突
- 为master添加一行内容,并提交
vim test.md
git commit -am "master version4"


- 切换到route3分支,并添加内容并提交
git checkout route3
vim test.md
git commit -am "route3 version4"


- 合并分支
git merge master

发生了内容冲突,需要手动修改文本冲突才可以!或者其他办法也可以解决,可以查询百度。
远程仓库Github
- 打开github官网:https://github.com(如果你打不开,请自己找办法打开)
- 注册并登录账号

- 新建远程仓库


这个界面建议详细设置一下,但这里是演示,所以只设置了仓库名称,其他选项为默认操作。

如果上图出现,则说明已经创建成功了
- 进行创建文件并提交


填写好文件名,文件内容,就可以点绿色按钮进行提交了。然后也可以填写提交的注释信息。


- 克隆远程仓库到本地

cd
mkdir repo_floder
cd repo_floder
git clone https://github.com/tungchiahui/test_repo.git

如果出错,请检查是否能正常访问github!


- 对文件内容进行修改
cd test_repo
vim test1.md



- 查看该本地仓库与哪些远程仓库有联系
git remote -v

- 将本地仓库push到远程仓库
git push

这里需要你输入github的用户名与密码,用户名则为github用户名,但是密码则为github用户token,生成token的步骤如下:




Note随便填,有效日期选择没有截止时间。
下面能勾的勾全勾上,这是权限。

复制token并填入password中(token在终端中输入会被隐藏,输完直接回车即可)

- 查看远程仓库

发现文件已经被修改了!
- 对远程仓库内容进行修改

- 将远程仓库内容拉到本地仓库
git fetch

- 查看本地与远程仓库区别
git diff origin/main
#git diff 远程仓库名/分支名

- 如果发现内容没问题,就可以将远程仓库内容同步到工作区
git pull

- 查看项目修改历史
git log

使用Pull Request合并代码
Pull Request简称PR,用于请求将一个分支中的修改合并到另一个分支。PR可以让项目成员在合并前查看代码变化、留言讨论和进行审查,因此团队协作时通常不会直接将未审查的代码push到main分支。
- 从main分支创建并进入一个功能分支
git checkout main
git pull origin main
git checkout -b feature/pr-demo
feature/pr-demo是本次示例的分支名,实际开发时应使用能表达修改内容的名称。
- 修改文件并提交到本地仓库
vim test1.md
按下insert按键,然后随便输入点正文.
例如
TEST11111

然后按下ESC,再输入:wq进行保存.
git add test1.md
git commit -m "修改test1文件"
- 将功能分支推送到Github
git push -u origin feature/pr-demo
-u会建立本地分支与远程分支的跟踪关系,之后在该分支上可以直接使用git push。

- 在Github仓库页面创建PR
推送新分支后,Github仓库页面通常会显示Compare & pull request按钮,点击该按钮。如果没有显示,也可以进入仓库的Pull requests页面,点击New pull request。

确认两个分支选择正确:
base: main:修改最终要合并到的目标分支。compare: feature/pr-demo:包含本次修改的来源分支。
PR只能在两个不同的分支之间创建。确认下方显示的提交和文件变化没有问题后,填写PR标题和说明,再点击Create pull request。

- 审查并继续修改PR
创建PR后,可以在Files changed页面查看本次修改,也可以邀请其他项目成员进行Review。


如果审查后需要继续修改,不需要重新创建PR。只需在同一个功能分支上继续提交并push,新的提交会自动加入当前PR。
vim test1.md
按下insert按键,然后修改下正文.
例如
TEST222

然后按下ESC,再输入:wq进行保存.
git add test1.md
git commit -m "根据Review意见修改"
git push
你会发现又多了一个commit如下图.

点击Files changed页面查看本次修改:

- 合并PR
审查通过且代码没有冲突时,拥有仓库写入权限的成员可以点击Merge pull request,再点击Confirm merge完成合并。仓库如果设置了审查或自动测试规则,需要先满足这些条件才能合并。


- 同步main分支并删除已合并的分支
合并成功后,可以在PR页面点击Delete branch删除Github上的功能分支。然后返回终端,更新本地main分支并删除本地功能分支。


git checkout main
git pull origin main
git branch -d feature/pr-demo

向没有写入权限的仓库提交PR
如果想向其他人的开源项目贡献代码,通常没有权限直接将分支push到对方的仓库。此时需要先在Github上点击Fork,将该仓库复制到自己的账号下。
Fork完成后,克隆自己的仓库并记录原仓库地址:
git clone https://github.com/你的Github用户名/仓库名.git
cd 仓库名
git remote add upstream https://github.com/原仓库用户名/仓库名.git
git remote -v
其中origin指向自己Fork出来的仓库,upstream指向原仓库。接下来仍然需要创建功能分支,不要直接在main分支上修改。
git checkout -b feature/pr-demo
# 修改文件后提交
git add .
git commit -m "添加示例功能"
git push -u origin feature/pr-demo
推送后在Github上创建PR,并特别确认:
base repository是对方的原仓库,base是对方要接收修改的分支。head repository是自己Fork的仓库,compare是自己刚刚推送的功能分支。
之后填写标题和修改说明,点击Create pull request即可向原项目提交PR。
VScode + Git
VScode是什么?
VScode是一个文本编辑器,类似于Vim等编辑器,但是他有图形界面,有非常多的好用的插件,而且可以集成编译器环境,最终也可以被用户自定义配置成Visual Studio那样的IDE。
VScode官网:
https://code.visualstudio.com/
创建文件夹并在该文件夹下打开VScode

新建文件


初始化Git(类似于git init命令)


U是指未追踪状态,也就是文件还在工作区
将文件提交到暂存区(类似git add)

取消提交到暂存区点减号(这里不取消)

A是added表示在暂存区
进行提交(类似于commit)

输入提交信息,并点对号进行commit
创建新分支,并进入新分支


修改内容

显示M为修改状态
查看历史版本对比(点击文件)

提交

切换回main分支


合并分支



Push到Github远程仓库
- 在下面这个界面找到
Publish to Github,可能会弹出来点击Sign In,然后按提示在浏览器中完成Github授权。

- 输入仓库名


- 打开github仓库查看


使用VScode图形化提交Pull Request
本节演示如何使用VScode创建、审查和合并Pull Request,整个过程不需要在终端输入Git指令。
注意:如果要使用Pull Request,功能分支提交完成后不要执行上文的“切换回main分支”和“合并分支”操作。应当将功能分支保持独立,通过PR审查后再合并到main分支。
- 安装Github Pull Requests扩展
打开VScode左侧的扩展页面,搜索GitHub Pull Requests,安装由Github发布的GitHub Pull Requests扩展。

- 从main创建功能分支
先点击VScode左下角的当前分支名,切换到main分支。在源代码管理页面点击选择Pull,保证本地main分支与Github上的内容一致。


再次点击左下角的分支名,选择Create new branch from...,选择main作为起点,然后输入一个能表达修改内容的分支名,例如feature/pr-demo。创建后VScode会自动切换到该分支。





- 修改文件并提交
在功能分支中修改文件并保存,然后打开源代码管理页面:

- 点击文件右侧的
+,将修改加入暂存区。 - 在上方输入提交信息,例如
Add PR demo。 - 点击
Commit完成本地提交。


commit后变为

- 在VScode中创建PR
打开左侧的Github Pull Requests页面,点击Create Pull Request。也可以按Ctrl+Shift+P打开命令面板,执行GitHub Pull Requests: Create Pull Request。

- 填写PR信息
在Create Pull Request页面中检查以下内容:
Base Repository:接收修改的Github仓库。Base Branch:要合并进入的目标分支,通常为main。- 来源分支:当前的功能分支,例如
feature/pr-demo。 Title:简洁描述本次修改。Description:说明修改原因、主要内容和验证方法。
也可以根据需要添加Reviewers、Assignees和Labels。检查无误后点击Create提交PR;如果修改还没有完成,可以选择Create Draft创建草稿PR。

如果当前分支还没有推送到Github,VScode会提示发布分支。选择publish branch即可将当前功能分支推送到远程仓库。

- 审查并修改PR
创建成功后,VScode会进入PR的Review Mode。在这里可以查看提交记录和文件差异、留言、邀请审查,也可以继续修改代码。
可以查看合并差异:


如果需要根据审查意见修改代码,保持在当前功能分支上,然后继续使用源代码管理页面进行Commit.也就是可以继续修改.

同样先add再commit本次修改,可以命名为Add PR demo2.

最后Push。新的提交会自动加入当前PR,不需要重新创建PR。

可以看到如图,两次commit都被PR包含了.

也可以看到文件差异里,两次提交都被可以被合并到main了.

- 合并PR并清理分支
审查通过且自动检查完成后,拥有仓库写入权限的成员可以在PR详情页点击Merge完成合并。


合并完成后,VScode会提示删除远程和本地的功能分支。确认PR已经正确合并后再进行删除,最后切换回main分支并点击Pull获取最新代码。


紧接着PR会被自动关闭.
