Git常用基本命令

Git 介绍

当我们在多人开发项目的情景下,为了提高开发效率,都会用到版本控制工具,如SVN、Git等。
Git是一种分布式版本控制系统,主要用于协作开发和代码管理。它允许多个开发者可以同时修改同一份代码,而不会出现冲突的问题。Git可以追踪文件的修改历史,并可以在不同的分支之间切换。使用Git可以方便地查看以前的文件版本和修改记录,且它具有很强的分支和合并功能,使得团队协作开发变得非常高效。Git还支持在本地操作,不需要联网,因此可以在没有网络连接的情况下完成开发。同时,Git也是开源软件,可以自由地下载、使用和修改它。
下面将从Git仓库的创建Git常用的基本命令Git的分支管理Git查看提交历史Git标签Git远程仓库来介绍一下Git的使用。

Git 创建仓库

创建Git仓库有如下几种方式:

  • git init:初始化一个git仓库
  • git clone:clone一个git仓库
  1. git init:
    在git bash中使用git init命令来初始化一个Git仓库,执行完git init命令后,会生成一个.git目录,该目录包含了资源数据,且只会在仓库的根目录生成。

    • 如果用当前目录作为Git仓库,需要执行如下命令:
      git init
      
      执行结果如下:
      在这里插入图片描述
      执行完该命令后,就会在当前目录下生成.git文件夹,并且会默认生成一个master分支。
    • 如果要在指定的目录下生成仓库,需要执行如下命令:
      git init newDir
      
      其中newDir为仓库的路径,执行完成后,会在newDir目录下生成一个.git文件夹。
      执行结果如下:
      在这里插入图片描述
  2. git clone
    使用git clone命令可以从Git仓库拷贝项目,类似于SVN中的 svn checkout,命令格式为:

    git clone  [directory]
    

    其中url为git仓库地址,directory为本地目录,比如要克隆某个远程Git 代码仓库,可以用下面的命令:

    git clone https://gitee.com/di-zehan/embedded_study.git
    

    执行完成后会在当前目录下生成仓库,如果要在执行目录下生成,可以在后面加上一个具体的位置路径,如:

    git clone https://gitee.com/di-zehan/embedded_study.git newgit
    

    执行结果如下:
    Git常用基本命令_第1张图片
    git clone时,可以用不同的协议,包括ssh、https等,其中最常用的是ssh,其优点是速度比较快,还可以配置公钥免输入密码,写法分别如下:

git clone [email protected]:di-zehan/embedded_study.git         --SSH协议
git clone https://gitee.com/di-zehan/embedded_study.git      --HTTPS协议

Git 基本命令的使用

  • git config:配置信息
  • git add:添加文件到缓存命令
  • git status:查看文件的状态命令
  • git diff:查看更新的详细信息命令
  • git commit:提交命令
  • git reset HEAD:取消缓存命令
  • git rm:删除命令
  • git mv:移动或重命名命令

下面对这些命令进行详细介绍:

  1. git config
    git config命令可以配置用户名和邮箱地址,便于将代码提交到远程仓库,命令如下:
    git config --global user.name '你的用户名'
    git config --global user.email ‘你的邮箱’ 
    
  2. git add
    git add 命令可将文件添加到缓存,添加所有文件,命令如下:
     git add *
    
    当然也可以指定某一个文件或者某一类文件,如将java文件添加到缓存中,命令如下:
    git add *.java
    
  3. git status
    git status命令可以用来查看相关文件的状态,命令如下:
    git status
    
    如果有修改的文件,则执行结果如下:
    Git常用基本命令_第2张图片
    根据上面git status命令的提示内容,我们可以得到三种处理情况:
    • 暂存文件的命令:git add <文件名>

    • 放弃未暂存文件的修改命令:git checkout – <文件名>

    • 将被修改的文件暂存并提交的命令:git commit -a

      如果你对Git的各种状态比较熟悉了,也可以使用 git status -s 来查看简写的状态,这种简写的状态和SVN上的差不多 M - 被修改A - 被添加D - 被删除R - 重命名?? - 未被跟踪 等等。如果有修改的文件,则执行结果如下:
      在这里插入图片描述

  4. git diff
    git diff命令用来查看更新的详细信息,与git status不同的是,git status只显示更新的状态,而 git diff 可以显示已写入缓存与已修改但尚未写入缓存的改动的区别具体的详细信息。
    • 尚未缓存的改动:git diff

    • 查看已缓存的改动: git diff --cached

    • 查看已缓存的与未缓存的所有改动:git diff HEAD

    • 显示摘要而非整个 diff:git diff --stat
      比如,我们修改README.md,通过上述四个命令得到如下结果:
      git diff:Git常用基本命令_第3张图片
      git diff --cached:
      在这里插入图片描述
      git diff HEAD:
      Git常用基本命令_第4张图片
      git diff --stat:
      在这里插入图片描述之后我们将修改README.md文件add到缓存中,再使用上述四个命令查看修改详细信息:
      git diff:
      在这里插入图片描述

      git diff --cached:
      Git常用基本命令_第5张图片

      git diff HEAD:
      Git常用基本命令_第6张图片
      git diff --stat:
      在这里插入图片描述

  5. git commit
    git commit命令用于将缓存区内容添加到仓库中,可以在后面加-m选项,以在命令行中提供提交注释,命令如下:
    git commit -m "第一版本提交"
    
    因为每次提交之前都需要add一下,如果想要跳过add这一步,可直接使用-a选项,命令如下:
    git commit -am "第一版本提交"
    
  6. git reset HEAD
    git reset HEAD命令用于取消已缓存的内容,比如我们要取消已缓存的test.txt文件,命令如下:
    git reset HEAD test.txt
    
    本质上,执行git reset HEAD就是取消之前git add添加。
  7. git rm
    git rm命令用于删除目录中的文件,如果手工从目录中删除某个文件,执行git status时就会出现Changes not staged for commit提示,因此删除文件使用如下命令:
    git rm 
    
    如果删除之前修改过并且已经放到缓存区的话,必须使用强制删除选项 -f ,命令如下:
    git rm -f 
    
    如果把文件从缓存区移除,但仍需要保留在当前工作目录中,可以使用 --cache 选项,命令如下:
    git rm --cached 
    
    也可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:
    git rm –r *
    
  8. git mv
    git mv命令用于移动或重命名一个文件、目录、软连接,如要将一个file.txt文件重命名为newfile.txt,则可以使用如下命令:
    git mv file.txt newfile.txt
    
    执行结果如下:
    在这里插入图片描述
    Git常用基本命令_第7张图片
    可以看到,file.txt名称修改为newfile.txt。

Git 的分支管理

几乎每种版本控制系统都支持分支的管理,使用分支我么你可以从主干分离出来,然后进行开发,不会影响主干。
下面是一些常用的分支命令:

  • git branch:查看分支命令
  • git branch [branchname]:创建分支命令
  • git checkout [branchname]:切换分支命令
  • git merge:合并分支命令
  • git branch -d [branchname]:删除分支命令

下面对这些命令进行详细介绍:

  1. git branch
    git branch命令用来查看分支、创建分支,当没有参数时,git branch会列出你在本地的分支;当有参数时,git branch就会创建以该参数命令的分支。
    如果查看分支,命令如下:

    git branch
    

    执行结果如下:
    在这里插入图片描述

  2. git branch [branchname]
    如果想创建一个新的分支,名称为test,命令如下:

    git branch test	
    

    执行结果如下:
    在这里插入图片描述
    在这里插入图片描述

  3. git checkout [branchname]
    git checkout 命令用于切换分支,命令格式如下:

    git checkout [branchname]
    

    如果想切换到刚才创建的test分支,命令如下:

    git checkout test
    

    在这里插入图片描述
    在这里插入图片描述
    可以发现,没有执行前,当前分支为master,切换分支后当前分支变为test。
    当前,我们也可以使用git checkout -b [branchname]命令实现创建新分支后立即切换到该分支下,命令如下:

    git checkout -b newtest
    

    执行结果如下:
    在这里插入图片描述
    在这里插入图片描述

  4. git merge
    git merge命令用于将任意分支合并到到当前分支中去,命令格式如下:

    git merge branchname
    

    如果我们新建一个newtest分支,并在该分支中添加test.txt文件,然后在master分支中将newtest分支的修改合并到master,命令及执行结果如下:
    Git常用基本命令_第8张图片
    如果出现合并冲突,比如有两个分支:master、newtest,两个分支中都有test.txt文件,这个时候如果对两个分支都进行修改,之后再提交,最后将newtest分支合并到master中,命令如下:
    Git常用基本命令_第9张图片然后再将newtest分支修改的内容合并到master分支中:
    Git常用基本命令_第10张图片
     可以看到newtest分支修改的内容和master分支修改的内容发生了冲突,这是根据具体的情况去解决,如下,我们保留两个分支都有的,之后再add,在commit就可以了:
    Git常用基本命令_第11张图片
     到此一个简单的合并就完成了。但实际项目开发中,合并比这要复杂的多,要结合具体的情况去操作。

  5. git branch -d [branchname]
    git branch -d 可以删除分支,删除分支命令格式如下:

    git branch -d [branchname]
    

    如果我们要删除test分支,命令如下:

    git branch -d test
    

在这里插入图片描述

Git 查看提交历史

如果想查看一下提交历史,可以通过git log命令查看,命令如下

git log

执行结果如下:
在这里插入图片描述
下面是查看历史记录的几个选项:

  • –oneline:查看历史记录的简介版本
  • –graph:查看历史记录中什么时候出现了分支、合并
  • –reverse:逆向显示所有日志
  • –author :查找指定用户的提交日志
  • –since–before–until、–after: 指定筛选日期
  • –no-merges :选项以隐藏合并提交

可以用--oneline选项,查看历史记录的简介版本:
在这里插入图片描述
可以用--graph选项,查看历史中什么时候出现了分支、合并:
Git常用基本命令_第12张图片
可以用reverse选项,来逆向显示所有日志:
在这里插入图片描述
如果只想查看指定用户提交的日志,可以使用命令:git log --author,比如我们要找Dzhuser提交的部分:
在这里插入图片描述
如果查看指定日期的日志,可以选择--sincebefore,但是也可以使用--until--afterno-merges选项来隐藏合并提交。
比如我们想查看6月15之后至6月17号之前的所有提交,可以执行以下命令:

git log --oneline --before={2023-06-15} --after={2023-6-17} --no-merges

了解每条提交与哪个分支/标签关联是非常有用的。--decorate标记让git log展示所有执行每个提交引用(如分支、标签等),比如:
在这里插入图片描述

Git 标签

使用标签可以很方便的永远的记住那个特别的提交快照,比如:我们发一个新的版本时,可以给它加一个“vx.x”版本,这样你可以使用git tag给它打上标签。
可以使用git tag -a vx:x来创建一个标签,其中-a选项表示创建一个带注解的标签。不加-a的话可以执行,但是不会记录打标签的时间,也不需要添加标签注解。
命令如下:
在这里插入图片描述

  • 追加标签
    如果项目已经发布,忘记加标签,可以追加标签,比如我们发布了提交ec28cec,但是忘记打标签。
    在这里插入图片描述
    可以通过git tag -a v0.9 ec28cec
    在这里插入图片描述在这里插入图片描述
  • 查看标签
    git tag用于查看所有标签,执行结果如下:
    在这里插入图片描述
    指定标签信息可通过命令如下:
git tag -a  -m "某某标签"

PGP签名标签命令:

git tag -s  -m "某某标签"

Git 远程仓库

前面内容使用到的Git命令都是在本地执行,但是如果想与其他开发人员合作,就需要用到远程仓库。
下面介绍远程仓库的几种命令:

  • git remote add:添加远程仓库
  • git remote:查看当前的远程仓库
  • git fetch、git pull:提取远程仓仓库
  • git push:推送到远程仓库
  • git remote rm:删除远程仓库
  1. git remote add:添加远程仓库
    git remote add命令可以添加一个远程仓库,其命令格式如下:

    git remote add [alias] [url]
    

    参数[alias]为别名, [url]为远程仓库的地址。
    仓库添加到本地,并命名为test,命令如下:

    git remote add test https://gitee.com/di-zehan/embedded_study.git
    
  2. git remote:查看当前的远程仓库
    git remote命令可以查看当前有哪些远程仓库,执行结果如下:
    在这里插入图片描述

  3. git fetch、git pull:提取远程仓仓库
    git fetch命令可以提取远程仓库的数据,如果有多个远程仓库,我们可以在后面加仓库的别名,执行结果如下:
    ****
    该命令执行完后需要执行git merge 远程分支到你所在的分支。假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。操作如下:
    在这里插入图片描述
    执行完成之后可以在本地仓库找到远程仓库的文件。使用这种方式只能保证本地是一个空的仓库,如果非空,则会报:fatal: refusing to merge unrelated histories错误。

    git pull命令用于从另一个存储库或本地分支获取并集成(整合),在默认模式下,git pull是git fetch后跟git merge FETCH_HEAD的缩写,使用格式:

    git pull [options] [ […]]
    

    如:我们可以将远程仓库pull到本地,如果本地仓库和远程仓库实际上是独立的两个仓库,–allow-unrelated-history选项来解决。
    Git常用基本命令_第13张图片
    git fetch和git pull的区别

    • git fetch:相当于是从远程获取最新版本到本地,不会自动合并。

    • git pull:相当于是从远程获取最新版本并merge到本地。

  4. git push:推送到远程仓库
    git push 命令用于推送你的新分支与数据到某个远端仓库命令,命令格式如下:

    git push [alias] [branch]
    

    Git常用基本命令_第14张图片

  5. git remote rm:删除远程仓库
    git remote rm命令用于删除远程仓库,命令格式如下:

git remote rm [别名]

Git常用基本命令_第15张图片

over! ^ _ ^

参考:https://blog.csdn.net/qtiao/article/details/97783243

你可能感兴趣的:(git,github)