Wiki
Git实操
1.常用指令介绍
本教程同时适用于 Windows 和 Linux。Windows 使用 PowerShell,Linux 使用 Bash。 除特别标注外,以下命令在两种环境中均可使用。 文件编辑统一使用 VS Code(没辙了,为了方便傻逼Windows),修改后请先按
Ctrl+S保存,再回到终端执行下一步。
1.1.创建目录并进入目录
请在你想存放代码的文件夹打开终端并执行以下命令:
mkdir hellogit
cd hellogit

1.2.git初始化(使该文件夹被git控制)
git init

1.3.创建并编辑文件,查看当前文件夹内的文件
code test.md
在 VS Code 中随便输入一段文本,按 Ctrl+S 保存。
新文件只有保存后才会出现在磁盘上。

回到终端查看文件:
ls

1.4.查询当前文件的状态
git status

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

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

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

这几行的意思是tungchiahui(邮箱为tungchiahui@gmail.com)用户于2023年12月30日周六00:42:47往master分支提交了注解为"version1"的项目版本
1.8.可以尝试对文件内容进行修改,并再次进行提交
code test.md
在 VS Code 中随便修改文件内容,按 Ctrl+S 保存,然后回到终端继续操作。

git add test.md
git commit -m "version2"
git log

1.9.如何忽略掉不想提交的文件
-
首先创建一个文件.gitignore
-
再创建一个文件 绝密文件不想上传的.py 并修改里面的内容
-
查看git状态
code .gitignore
code vinci_secret.py
先在 VS Code 中Ctrl+S保存空的 .gitignore 文件,

再为 vinci_secret.py 输入下面示例内容print("绝密代码")并按 Ctrl+S 保存,然后回到终端查看状态:

git status

- 修改.gitignore的内容,将不想被提交的文件名写入该文件
code .gitignore
在 VS Code 中修改文件内容,按 Ctrl+S 保存,然后回到终端继续操作。
.gitignore的内容为vinci_secret.py,代表commit的时候忽略这个文件。

git status

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

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

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

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

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

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

1.11.分支的合并
- 在route3分支中随便修改文件内容并提交
code test.md
在 VS Code 中修改文件内容,按 Ctrl+S 保存,然后回到终端继续操作。
这次修改的内容是放在BBB的下一行,写一个CCC。

git commit -am "route3 version3"
#-a -m也可以被省略成-am

- 切换到master分支
git checkout master
code test.md
在 VS Code 中查看当前分支的文件内容。
发现刚才在 route3 上改成的BBB CCC并没有被同步到 master ,这里 master 分支还是BBB

- 将route3分支合并到当前分支上
git merge route3
# git merge 被合并的分支名
code test.md
在 VS Code 中查看当前分支的文件内容。

这其实就是把route3写多写的那一行给合并到master分支了。
1.12.分支合并的冲突
- 为master添加一行内容,并提交
code test.md
在 VS Code 中修改文件内容,按 Ctrl+S 保存,然后回到终端继续操作。

git commit -am "master version4"

- 切换到route3分支,并添加内容并提交
git checkout route3
code test.md
在 VS Code 中修改文件内容,按 Ctrl+S 保存,然后回到终端继续操作。

git commit -am "route3 version4"

- 合并分支
git merge master

发生了内容冲突,需要手动修改文本冲突才可以!或者其他办法也可以解决。
因为一边第三行是DDD,一边是EEE,内容不一样,冲突了。
这里是进阶教程里的,暂时先不用知道如何处理。
1.13.远程仓库Github
-
打开github官网:https://github.com(如果你打不开,请自己找办法打开)
-
注册并登录账号
注册账号就点最底下的create an account即可,按提示操作即可

- 新建远程仓库


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

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


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


- 克隆远程仓库到本地

找一个空文件夹打开终端并运行下列命令:
git clone https://github.com/tungchiahui/test_repo.git

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


- 对文件内容进行修改
cd test_repo
code test1.md
可以看到那会儿在github上写入的内容:

在 VS Code 中修改文件内容,按 Ctrl+S 保存,然后回到终端继续操作。


- 查看该本地仓库与哪些远程仓库有联系
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

1.14.使用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是本次示例的分支名,实际开发时应使用能表达修改内容的名称。
- 修改文件并提交到本地仓库
code test1.md
在 VS Code 中输入一段正文。
例如
测试1
提交新内容啦!
你好!!!
TEST11111

按 Ctrl+S 保存,然后回到终端继续操作。
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。
code test1.md
在 VS Code 中修改正文。
例如
测试1
提交新内容啦!
你好!!!
TEST11111
TEST222
按 Ctrl+S 保存,然后回到终端继续操作。
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

1.15.向没有写入权限的仓库提交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。
2.VScode + Git
2.1.VScode是什么?
VScode是一个文本编辑器,类似于Vim等编辑器,但是他有图形界面,有非常多的好用的插件,而且可以集成编译器环境,最终也可以被用户自定义配置成Visual Studio那样的IDE。
2.2.VScode官网:
https://code.visualstudio.com/
2.3.创建文件夹并在该文件夹下打开VScode

2.4.新建文件


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


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

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

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

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


2.10.修改内容

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

2.12.提交

2.13.切换回main分支


2.14.合并分支



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

- 输入仓库名


- 打开github仓库查看


2.16.使用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会被自动关闭.

3.最常用的几个功能扩展
3.1.向无仓库权限提交PR
比如我用另一个号新建了一个仓库,但是我的tungchiahui账号并没有这个仓库的权限:
https://github.com/dongjiahui0204/TEST_PR
首先要先Fork这个仓库:


Fork完毕了:

克隆下自己的这个仓库:
git clone https://github.com/tungchiahui/TEST_PR.git
打开VScode:
cd ./TEST_PR
code .
创建分支:



随便起个分支名字:

在新分支里,随便编辑点什么:

然后commit,push提交到你的仓库。


应该选自己的:

回到自己的仓库:
https://github.com/tungchiahui/TEST_PR

选择把自己的tungchiahui/TEST_PR的prprpr分支提交PR到dongjiahui0204/TEST_PR的main分支。

然后你写一些你提交的是什么东西写在这个描述里,然后好让人家维护者方便看你提交的是啥。

如下图你就提交成功了。

接下来,我切换dongjiahui0204账号介绍维护者如何合并别人提交上来的PR

我可以点合并PR:

这就合并成功了

内容已经被合并了:

