git版本控制新手入门命令

121 阅读10分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

这是记录git版本控制工具的命令使用。

--help

当我们遇见不会的命令时,可以使用git --help,它会列出git的一些常用命令以及他们的作用。此外,它后面还可以加参数g或者a

  • it help: 给出git概要和基本的git常用命令,
  • git help -a 给出所有的可用命令,
  • git help -g 给出有用的git指南,
  • git help git 显示git手册。

config

我们第一次安装git后,需要配置git,告诉git我们的身份(我们是谁)。

一般就是配置用户名和邮箱:

  • git config --global user.name 'xxx'
  • git config --global email 'xxxxxx'

我们也可以删除某个配置:

  • git config --unset --global user.name,这就删除配置中的user.name
  • git config --unset --global email,这就删除了配置中的email

我们可以使用git config --list查看全局配置。

init

我们在让一个项目进行版本控制时,需要使用git init初始化。它会生成一个文件.git,以后git就会跟踪这个文件从而实现版本控制。

commit

项目提交。(只是跟踪了这些文件,还没有提交到远程分支)

一般提交的步骤是:

  • git status,显示我们所在的分支,同时会显示跟踪有没有需要提交的文件(也就是有没有更新的)

  • git add,我们需要添加我们要提交的文件到暂存区中

    • 可以使用git add .提交所有可以增加的文件(就是git status中提示的那些文件)
    • 可以单独添加文件git add xxx
  • 再使用git status,我们可以查看我即将要提交的文件有哪些

  • 再使用git commit -m '提交的信息',我们如果不使用-m,git就会默认打开一个文本编辑器让我们添加提交的信息。

  • 可以使用git log查看我们提交的记录。(会有提交的作者信息、时间、提交的信息)

当然,我们可以合并git add .git commit,使用git commit -am '提交的信息'

diff

我们修改了文件后,我们想要查看我们修改了哪些内容,就需要使用git diff

  • git diff默认比较的是暂存区和文件目录的区别,如果暂存区没有,才会比较文件目录和已经提交的文件区别。

rm

删除已经跟踪的文件。(就是已提交后的文件)

当文件重命名后,比如之前我们有一个文件index.html,现在我们将他重命名为了home.html,然后现在我们使用git status,我们会发现它的提示是:删除了index.html文件,有一个新的home.html文件。(它不能只能识别这是同一个文件,只是名字变了)

所以我们就得先删除已提交的index.html文件,再提交home.html文件。

  • git rm index.html
  • git add home.html
  • git commit -m '把index.html重命名为了home.html'

rm操作对象只能是已经提交的,如果我们新创建一个文件,还没有commit,那么我们使用rm对其进行操作是无效的,它会提示 No such file or directory

如果是文件夹,需要使用git rm -rf 文件名

mv

使用mv我们可以直接重命名或者移动文件(文件夹)。

比如我们现在需要将之前的home.html改为index.html:

  • git mv home.html index.html,我们发现我们本地的文件名字改为了index.html
  • git commit -m 'xxx',记住:rm后一定要commit。

mv操作对象只能是已经提交的,如果我们新创建一个文件,还没有commit,那么我们使用mv对其进行操作是无效的,它会提示 not under version control(并不在git的版本控制范围之内)

此外我们还可以移动该文件:(已经有了html文件夹且提交过)

  • git mv index.html html/
  • git commit -m 'xxxxx'

这样这个index.html文件就在html文件夹下面了。

head

我们可以使用git checkout HEAD来恢复文件。

假如我们使用git rm index.html删除了index.html这个文件,现在我们想恢复:

  • git checkout HEAD -- index.html ,其中 HEAD表示最近的一次提交, -- 表示当前分支
  • git commit -m '恢复了xxxx'

这就将index.html恢复到了最近的一次提交时的情况了。

但是如果我们使用rm删除了文件后,又提交了,那么我们最近的一次提交也是空的,也没有这个我们,那么我们就需要恢复到最近提交的上一次提交

  • git checkout HEAD^ -- index.html,^代表最近提交的上一次,^^代表最近提交的上两次……
  • git commit -m '恢复了xxxxx'

此外,我们修改文件后,想恢复到修改之前,也可以使用这个。

revert

我们查看历史提交:

  • git log --oneline // 只查看有id号的一行

如果我们想恢复到某一次的提交,就可以使用revert:

  • git revert id号

reset

reset和revert的作用有些类似。它也是主要用于版本回退,但是它的参数不同,回退的作用也不同:

  • git reset --soft id号,它是回退到这个版本的commit之前,add之后。同时,我们commit后,会覆盖掉id号后面的提交。
  • git reset --mixed id号,默认,它是回退到这个版本的add之前,我们需要先add,再commit
  • git reset --hard id号,他是回退到这个版本的commit之后

注意:reset之后,如果是--soft和--mixed后再commit,或者是--hard后,它是直接将head指针指向了那个id,在使用git log就只会显示到现在的id,同时再有新的改变,再commit就会从现在的id开始了。

而revert是不会移动head指针的,他只是会重新commit到之前的某一个版本,那个版本之后的还会保存下来,就是相当于执行了一次新的commit而已。

branch

  • git branch查看所有的分支
  • git branch 新的分支名 ,可以创建一个新的分支
  • git branch -m 分支名 分支新名,可以修改分支的名字
  • git branch -d 分支名,可以删除这个分支

checkout

如果我们需要升级版本,或者修改bug,但是不能影响之前的代码,一般就是新建一个分支。

新建分支后要移动到新建的分支上:

  • git branch new-mobile,新建了一个new-mobile分支
  • git checkout new-mobile,现在我们就移动到了这个新的分支上面了

我们可以现在在这个分支上面修改了,而且不会改变其他分支:

新建了一个new.txt文件,内容为new:

  • git add new.txt,新建一个new.txt文件
  • git commit -m 'new-mobile分支新建文件'
  • git log --oneline --decorate ,查看日志,我们发现当前head指针指向的是new-mobile分支上面的新提交的

image-20220814153532499.png

查看我们的文件:

image-20220814153559167.png 现在我们返回主分支:master

  • git checkout master,返回了主分支
  • git log --oneline --decorate,查看日志

image-20220814153737519.png

我们再查看我们的文件夹:

image-20220814153753090.png

我们发现它回到主分支之前的状态了,也就是新分支并不会影响我们的主分支。

diff查看分支的区别

我们可以使用diff查看两个分支之间的区别:

  • git diff master..new-mobile

image-20220814154156257.png

也可以查看两个分支之间的某个文件的区别:

  • git diff master..new-mobile new.txt

merge

我们想合并两个分支,就可以使用git merge。假如我们想把new-mobile分支合并到master分支上:

  • 查看当前的分支:git branch,如果不是master分支,就得先切换到主分支

  • git merge new-mobile,合并分支

image-20220814154955612.png

注:merge合并不会产生新的日志,但是他会将合并的分支的日志内容加到合并到之后的分支上面

  • git log --oneline --decorare

image-20220814155220116.png

git log --oneline --decorare只显示当前分支,我们可以添加--all查看所有分支的历史提交

  • git log --oneline --decorate --all -10 --graph 查看10条,所有分支的历史提交

conflict解决合并冲突

我们在合并后,在master分支上面修改了new.txt,在上面新增了master字段,并提交。然后再new-mobile分支上面也修改了new.txt,在上面也新增了mobile字段,并提交。然后合并,这时就会遇到一个合并冲突的问题:

image-20220814161300977.png

合并:

image-20220814161324065.png

我们可以打开new.txt文件:

image-20220814161547124.png

  • 要解决此问题,可以使用手动的方式:留下我们想要的内容,删除冲突的内容

image-20220814161715179.png

  • 然后提交:git add .git commit,可以不用加-m,git会自动给我们加消息

image-20220814161843879.png

合并成功!

ignore

忽略文件,告诉git,我们忽略这个文件,不会这个文件进行跟踪,那么以后我们哪怕修改这个文件,git也不会管它。

  • git config --global core.excludesfile ~/.gitignore_global
  • vi ~/.gitignore_global。输入文件名。以后就会自动忽略这个文件。
  • ls -la*,查看以.开头的文件

remote

我们之前所作的,都是基于本地的,并没有推送到远程仓库中,这样其实并没有达到协同工作的效果。

我们想推送到远程仓库,就得先连接远程仓库:(以gitee仓库为例)

  • git remote add origin https://gitee.com/iuyan/git-lesson.git

可以使用git remote -v查看连接情况

image-20220814193035233.png

push

我们可以使用push将本地的分支推送到远程仓库中:

  • git push -u origin master,输入用户名和密码,然后会代码文件。

查看本地和远程的分支:

git branch -a # 查看本地所有分支
git branch -r # 查看远程分支

将其他某分支推送上去:

  • git push -u origin 某分支,-u的目的是可以远程跟踪这个origin/master 分支

push的顺序:

cd 目标目录
git checkout master    # 切换到主分支
# 修改文件……
git commit -am '修改了某文件'    # 提交
git push -u origin master    # 把提交推送到远程

clone

我们想将别人仓库的代码下载到我们本地电脑上,除了可以使用github或者gitee上自带的download外,还可以使用clone克隆到本地

  • git clone https://xxxx.git (目标目录),如果不加目标目录就会创建和地址仓库上一样的目录结构。(克隆会克隆所有的东西,包括log日志,因为clone时会将那个.git文件克隆下来)

fetch

假如我们克隆了别人仓库的代码,然后那个仓库的作者又更新了该仓库,我们如何获得最新的版本呢?那就是使用fetch拉取更新。

  • git fetch
  • git status,查看状态
  • 会提示远程库上有更新。需要合并分支:git merge origin/master
  • git status,提示保持一致了。

fork

我们觉得别人仓库里的代码很好,自己想基于此,进行二次开发。那么我们就需要将这个代码拿到,然后再自己git init再创建远程仓库,再push吗?其实不用那么麻烦,只需要使用fork就可以了。

image-20220814194422746.png

我们点击这个Fork,就会把这个代码库复制一份到自己的账户下。

再把自己账户下的这个库克隆到自己本地进行开发。

  • git clone https://xxx.git (目标目录)

cd 到该目标目录。 可以在该项目下配置git:

git config user.name 'xx'
git config user.email '某某@qq.com'

添加readme.md:

vi README.md
git add .
git commit -m '添加了README.md 文件'
git push origin master 

打开自己的版本库,可以看到最后一次更新来自他自己。


总结一下我们使用git命令来第一次push代码的步骤:

git init
git add .
git commit -m '说明'
git remote add origin https://xxx.git
git push -u origin main

当然,现实生活中我们一般都很少使用命令,一般都是只用使用编辑器上的git版本控制插件,或者是使用git的GUI图形界面。但是掌握命令还是有必要的,因为这才是原理呀!

完结