☰
从零开始使用git
2026/10/14 3:26:31 网站建设 项目流程
1.git init 初始化仓库

比如你写了一些代码,放在D:\C++\这个目录里,你想用git来管理的话,那么首先就要在这个目录里创建一个git仓库,这时候就会用到git initial。

出现Initialized empty Git respository in ... 就说明成功创建git仓库。

2.git status 查看当前git仓库的状态

Untracked files意思是未跟踪的文件,括号里有提示,告诉你使用git add命令来干啥干啥,我们先不管这个,根据提示我们可以知道这些文件都没有被提交到暂存区。

3. git add 提交到暂存区

4.设置名字和邮箱

git config --global user.name “名字”

git config --global user.email “邮箱”。

5.git commit

git commit -m “添加示例文件”,给这一次的提交附上说明:

5.git log 查看提交历史

后面我们的提交变多之后,可以用git log --oneline来让每个提交历史只显示一行,不显示作者和邮箱:

6.回滚 与 git diff
6.1 只在工作区做了修改:(git restore)

比如我在工作区修改了示例里的内容,我们可以先用git status来查看一下:

可以看到命令行显示,这个这个文件已经修改过了,还没有被提交到暂存区以便来用于提交。但是这个命令看不到我们具体做了哪些修改,这个时候我们就可以用git diff来看下具体做出了哪些修改:

“+”代表添加的内容,“-”代表删除的内容,我这里只在 示例.txt 里面做了添加,没有删除。好,接下来就到关键一步了,我们这里只是在工作区进行了修改,假设我修改错了,想要回退到工作区的上一个版本,那我们就使用git restore这个命令,然后再使用git status来看一下回退成功没有:

可以看到,我们已经回退成功了,没有显示有被改动的文件了。如果想要同时回滚多个文件,在git restore后面加上多个文件就行了。如果文件过多,直接用“.”来代替就行:

6.2 改动已经进入暂存区:(git restore --staged <file>...)

改动如果已经进入暂存区,那么就先回退暂存区,然后回退工作区:

同样,我们用“.”来替代所有需要回退的文件,通过git status就可以看到已经成功将暂存区回退了。之后再将改动从工作区中去掉就行了,这一步就不再展示了。

6.3 已经提交commit:(git reset --hard HEAD~1)

如果已经commit,最直接的做法就是把这个commit版本删除,然后依次进行暂存区和工作区的回退就行了。删除这个commit版本用到这个命令:git reset --hard HEAD~1。HEAD永远指向第最新的一个commit,再往前的commit依次被HEAD~1、HEAD~2···指向。git reset --hard HEAD~1这个命令是指我们想重置下HEAD的位置,让它指向HEAD~1那个commit。

--hard是指全部回滚,将工作区、暂存区、提交历史全部回滚到HARD~1那个commit的样子。

另外,git reset有三种模式:

git reset HEAD~1 = git reset --mixed HEAD~1

还有另外一种回滚方法,就是使用git revert HEAD创建一个新的commit,它对应的改动内容和之前最新改动的那一个commit正好相反,也就是说,我们创建的这个commit可以抵消原来的那个commit,从而达到回滚的效果,这样,如果有一天我们后悔回滚了,依然可以从提交历史里找到那个已经被回滚的commit。

输入git revert HEAD后会直接进入vim编辑,我们直接输入":wq"退出就行了。

7.gitignore

如果我们在提交的目录下有文件(比如notes.txt)不想commit,那就用到这个命令了,用完之后的每次提交,git都会自动把它忽略。首先,我们用vim .gitignore创建出来.gitignore文件,然后把不需要提交的文件写进去:

这个.gitignore文件是会出现在git status的输出里面的,这个是正常的,.gitignore这个文件我们是要随着项目正常提交的,提交之后这些规则就跟着项目一起保存下来了。

8.分支
8.1 了解分支

我们提交的项目正常情况是提交到master分支上的,这个可以通过git log查看到的,而master分支是比较稳定的分支,我们希望提交到这上面的项目是稳定的,但是项目的一个功能开发过程中可能会连续提交很多个commit,因此我们可以先创建一个分支,将这些改动先提交到分支上,等到最后测试完这个功能没问题后,再合并到master分支上。

8.2 git branch 创建分支

用git branch <分支名>来创建分支,下面这个例子就是创建了一个名为分支演示的分支。

之后我们执行git branch来看一下我们创建的分支。

可以看到已经成功创建分支了,而现在我们是在master分支上。

8.3 git switch 切换分支

创建好分支后,就用git switch来切换一下分支,下面是示例:

这样,就成功切换到分支演示这个分支上了。但是一般在创建好分支之后,我们一般是直接切过去的,这时只需要用git switch -c <分支名>就行了,c是create的缩写,这样我们创建好一个分支之后就可以直接切过去了。

8.4 在新分支上提交代码

现在我在新分支上提交两次commit,然后用git log --oneline看下结果:

这样,我们就将两次修改提交到了分支演示这个分支上,在master上是看不到的,我们可以切回master看一下:

8.5 git merge 合并分支

我们在新分支上做好修改并且功能测试完没问题的话,就可以将其合并到master分支上了,合并到master分支之前,要先切到master分支上,然后用git merge进行合并,之后我们用git log --oneline可以看到现在HEAD 已经同时指向master和分支演示这两个分支上了。

8.6 删除分支

我们合并分支之后,就不需要这条分支了,这时使用git branch -d <分支名> 来进行删除就可以了。

9.处理合并冲突

如果我们在同时做两个功能,而两个功能分别在两个分支上,我们在提交的过程中就有可能会产生冲突。我们先修改一下文档,将修改后的示例文档提交到第一个分支上:

然后我们再回到master,创建第二个分支,在示例文档同样的位置上修改一下,提交到新的分支上:

这时我们回到master,来依次进行合并看一下:

可以看到,在我们合并第二个分支的时候,出现了冲突。我们使用Vim(其他文本编辑器也行)进入示例文档看一下:

在vim中,git已经给我们标记出来了出现冲突的地方,git把这个地方分成了两部分,HEAD是我们已经合并上去的修改,“第二次分支修改”这个分支上的修改是:“冲突示例:第二个分支上的修改”。我们只需要把git的提示删掉就能解决掉这个冲突:

之后我们退出vim,来重新提交一下就行了:

我们再进入vim看一下:

可以看到,两个分支上的修改已经成功合并到master上了,之后我们删除那两个分支就行了。

10. git rebase 挪分支

在写项目时,我们可能和本团队里的其他人同时在自己的分支上做修改,如果别人提前做完并且合并到master分支上,我们就需要把我们的分支挪到master分支最新位置的后面,以便于我们早发现与另一人合并的代码是否有冲突,及时做出修改。

假设小明和小红同时拉了一个分支,而小明的做的快,在小红做完第一次修改并提交后,小明就已经提交并合并到master上了 ,这时小红就需要rebase一下,然后看下有没有冲突,之后继续做剩下的修改,并提交合并:

以上就是小明已经提交了两次并将自己的分支合到了master上,而小红此时只提交了一次修改,假设这时小红还没有修改完,还不能合到master上了,那么她就需要rebase一下,提前解决可能存在的冲突,这样在最后merge到master上时能少去很多麻烦:

可以看到,在小红rebase的过程中,果然出现了冲突,如果这一次次的冲突留着不解决,放到最后合并到merge分支上一起解决的时候就会很麻烦。我们现在rebase一下提前发现冲突就可以解决了。

解决完冲突之后,我们再add一下,但是不需要再commit了,直接执行git rebase --continue就可以了。之后小红就可以继续修改,修改完之后就可以merge了。

11. git stash 把文件藏起来

假设小红在做项目的时候,在自己的分支上只做了一半,突然有个很紧急的问题需要解决,但是自己这个分支上的修改还没有完成,不能提交到分支上,那该怎么办,这时用git stash这个命令把修改到一半的文件藏起来即可,这样就能顺利切到master分支上,然后再拉一条紧急修复的分支,把那个紧急的问题修复完之后,再切回到自己的分支上,执行git stash pop把之前修改了一半的文件再取出来继续修改就可以了,下面是演示:

这个就是小红把修改了一半的文件给藏起来了,以免被master清除,等她修复完紧急问题之后,就可以回来继续修改了:

12. worktree

前面我们学会了使用stash,但是stash只适用于短期的修改,如果有很多功能要在多个分支上同时进行修改,那么每次都要stash一下就会很麻烦。这个时候就可以用到worktree了,我们前面其实一直在worktree里面,可以执行git worktree list看一下:

这就是一个worktree,假设我们要同时做另一个功能,我们就可以新建一个worktree:

git worktree add -b 新功能 ../C++/新功能文件夹 master。这个的意思是我们在C++这个目录下创建了一个名为新功能文件夹的worktree,分支名是新功能,基于master创建的。新功能前面有一个“+”号,说明新功能这个分支是在另一个worktree里的。

不同的worktree有着不同的工作区和暂存区,但是都有同一个提交历史,因此在worktree里提交完代码并merge到master上之后,如果要删除worktree的话,一定不能从文件夹里删除,要用git删除,这样才能避免出错:

13. github

git是我们的本地管理仓库,如果我们换一台电脑的话,这些就都不复存在了,github可以理解成网上存储,把我们本地的git仓库同步到github上,这样我们就相当于有了一个备份,下面我们使用这个命令来生成github的公钥和密钥,ssh-keygen就是生成SSH key的命令, -t ed25519是指定SSH key的类型,这个是GitHub推荐类型,照着写就行,-c是一段备注,一般写自己的邮箱,以方便以后认出来这个key是谁的。

这里让我们选择存放key的位置,回车默认就行。

接下来又让我们设置密码,我们直接回车就行,设了之后用着比较麻烦,我这里就没有设。

现在这两个文件都生成完毕了,并且放到了对应的目录里面。下面我们就看下公钥 的内容,以便上传到github上,Linux用这个命令:type %USERPROFILE%\.ssh\id_ed25519.pub。windows用这个命令:type %USERPROFILE%\.ssh\id_ed25519.pub。都是把文件内容显示出来:

我们把这个密钥复制下来,然后回到github上打开这个页面:

之后把我们复制的密钥填进去提交即可。

现在公钥就算是发送给github了,我们回到终端,用ssh -T git@github.com这条指令测试一下看有没有生效就行了。

14. 创建github仓库

进入github里,点击Repositories,进入之后设置仓库名称,创建仓库就行了

15.上传代码到github

我们创建好仓库之后,可以看到这样的提示:

这就是github在建议我们把本地仓库推上来。我们首先看第一条命令,这就是让git把我们刚才创建的github仓库地址记下来,并且给他个名称就叫做origin,以后我们在这个项目里说origin,git就知道指的就是这个github仓库,第二条命令是把分支名master改成main,我这里就不改了,第三行代码就是用来把本地项目代码和git记录推送到github上,如果你的分支名还是master没有改,那就把main改成master,这行命令就是说把本地master分支推送到origin,也就是github上的那个 仓库,-u的目的是把本地的master和github上的master绑定起来,绑定之后,以后再给github推送代码的时候,直接git push就行了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询