Git命令快速入门(建议收藏)

发布于:2022-11-09 ⋅ 阅读:(9) ⋅ 点赞:(0) ⋅ 评论:(0)

一、简介

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
Git 各平台安装包下载地址为:http://git-scm.com/downloads
安装过程可以参考菜鸟教程:https://www.runoob.com/git/git-install-setup.html
国内访问码云速度快一点,所以使用https://gitee.com/作为远程仓库。

二、基本场景Git用法

基本场景:

  1. 使用git init初始化一个Git仓库。
  2. 使用git add将文件添加到暂存区。
  3. 使用git commit将文件提交到本地仓库。
  4. 创建远程仓库并使用git remote add origin命令添加远程仓库地址。
  5. 使用git push命令将本地仓库代码推送到远程仓库。
  6. 使用git pull命令可以将远程仓库的文件拉取到本地仓库。

示例:

git init  #初始化仓库
touch README.md #创建README.md文件
git add README.md  #将README.md文件提交到暂存区
git commit -m "add README.md" #将暂存区的文件提交到本地仓库

接下来在gitee创建仓库:
在这里插入图片描述
仓库创建完成后,复制仓库地址:
在这里插入图片描述
接下来将远程仓库地址添加到Git本地仓库,然后将本地Git仓库代码推送到刚刚创建的远程仓库中。

git remote add origin https://gitee.com/L1692312138/git-demo.git #添加远程仓库
git push -u origin "master"   #将本地仓库的代码推送到远程仓库
git pull   #从远程仓库拉取代码

以上就是Git仓库最简单的使用场景,接下来会详细介绍一下Git命令的用法。

三、工作区、暂存区、本地仓库、远程仓库

在使用git init命令初始化一个仓库或者使用git clone克隆一个仓库后,文件夹下的文件就会被Git管理。
仓库可以分四种区域
工作区(workspace):就是当前这个项目目录或者文件夹下的所有文件。
暂存区(stage/index): 在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index),在使用git add命令后,文件被添加到暂存区。
本地仓库(版本库):工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库,可以当做是本地Git仓库,在使用git commit命令后,文件被提交到版本库。
远程仓库githubgitee等网站所提供的仓库,也可以是个人或公司搭建,使用git push命令将本地仓库文件推送到远程仓库上。

被Git所管理的文件会有四种状态
Untracked: 未跟踪,文件还没有加入到git库,还没参与版本控制。
Unmodified:未更改,文件已经加入git库中,但是还没有被修改过。
Modified:已更改,文件被修改了。显示为蓝色文件。
Staged: 已暂存,在使用add命令后,文件会被添加到暂存区,显示为红色文件。

          add              commit                  push
workspace ---> staging area ----> local repository ---->remote repository
工作区           暂存区                   本地仓库            远程仓库

当执行 git add 命令时,文件会被添加到暂存区。在IDEA中显示为红色文件。
当执行git commit命令时,文件会被提交到版本库。在IDEA中显示为绿色文件。
当执行git push命令时,文件会被推送到远程仓库中。
此外,在IDEA中,如果文件被删除,在commit提交时显示为灰色;
在这里插入图片描述

四、常用命令用法

git clone

git clone [url] 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

git clone https://gitee.com/L1692312138/git-command.git # 将远程Git仓库下载到本地

git add

git add 命令可将该文件添加到暂存区。
添加一个或多个文件到暂存区:git add [file1] [file2] ...
添加指定目录到暂存区,包括子目录:git add [dir]
添加当前目录下的所有文件到暂存区:git add .

git commit

git commit 命令将暂存区内容添加到本地仓库中。
git commit -m [message] : message是备注信息。
git commit [file1] [file2] ... -m [message]:可以提交指定文件到本地仓库。
git commit -am [msg] : 表示修改后的文件,不需要执行git add命令,可以直接提交。

git status

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。
可以使用 -s 参数来获得简短的输出结果。
在这里插入图片描述

git diff

git diff 命令比较文件的不同,使用--stat参数可以显示摘要。
git diff:可以比较工作去和暂存区文件的差异
在这里插入图片描述
在这里插入图片描述

git diff [commitID] [commitID] :可以比较两次commit提交记录之间的不同
在这里插入图片描述

git diff [branchName] [branchName] :可以比较两个分支之间的不同

git rm

git rm 命令用于删除文件。
git rm 删除文件有以下几种形式:

  1. 将文件从暂存区和工作区中删除;
  2. 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
  3. 如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可;
  4. 可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件;
git rm <file>
git rm -f <file> # 强制删除
git rm --cached <file> # 把文件从暂存区域移除,但仍然保留在当前工作目录中
git rm –r <dir>  # 文件夹递归删除

在这里插入图片描述

如果暂存区文件已经被修改,删除则需要强制删除:

在这里插入图片描述

将文件从暂存区域移除,但仍然保留在当前工作目录中:
在这里插入图片描述

git mv

git mv 命令用于移动或重命名一个文件。

git mv [file] [newfile]

在这里插入图片描述

git log

git log 查看历史提交记录。
使用--oneline 选项来查看历史记录的简洁的版本。
使用--graph 选项,查看历史中什么时候出现了分支、合并。
author参数可以查找指定用户的提交日志。
如果要指定日期,可以执行几个选项:--since--before,也可以用 --until--after,使用--no-merges 选项可以隐藏合并提交。

git log
git log --oneline
git log --graph --oneline  
git log --author=LiuShihao --oneline -5 
git log --oneline --before={3.weeks.ago} --after={2022-11-07} --no-merges

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

git blame

如果要查看指定文件的修改记录可以使用 git blame 命令

git blame <file>
git blame master.txt

在这里插入图片描述

git remote

git remote 命令用于在远程仓库的操作。

git remote -v #显示所有远程仓库
git remote show [remote] #显示某个远程仓库的信息
git remote add [shortname] [url]# 添加远程版本库
git push -u origin master # 将本地仓库代码推送到远程仓库
git remote rm name  # 删除远程仓库
git remote rename old_name new_name  # 修改仓库名

在这里插入图片描述

git fetch

git fetch 命令用于从远程获取代码库。

git fetch origin
git merge origin/master # 如果远程仓库有更新,可以使用merge命令进行合并

在这里插入图片描述

git pull

git pull 命令用于从远程获取代码并合并本地的版本。

git pull
git pull origin
git pull origin master:brantest # 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
git pull origin master #如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

git push

git push 命令用于从将本地的分支版本上传到远程并合并。
如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:

git push origin master #将本地的 master 分支推送到 origin 主机的 master 分支
git push --force origin master # 强制推送到远程仓库

git checkout

git checkout [branchName] :表示切换分支。
git checkout --file [fileName] :表示会用暂存区的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
git checkout HEAD <file> : 表示会用 HEAD 指向的 master 分支中的文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

git tag

如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。
使用-a选项会添加一个标签的注解,可以当做备注,推荐使用。
使用git log --decorate --oneline命令就可以看到打的标签。
也可以给之前版本追加标签,只需要在最后加上版本号即可git tag -a v0.9 63007d5
可以使用git tag命令查看所有的标签。

git tag v1.0
git tag -a v1.0  
git tag -a v0.9 63007d5  # 给指定版本打标签
git log --decorate --oneline -5 #查看带标签日志
git tag  # 查看所有标签
git tag -d v1.1 # 删除标签
git show v0.9 # 查看该版本修改的内容

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Git有commit,为什么还要引入tag?
“请把上周一的那个版本打包发布,commit号是6a5819e…”
“一串乱七八糟的数字不好找!”
如果换一个办法:
“请把上周一的那个版本打包发布,版本号是v1.2”
“好的,按照tag v1.2查找commit就行!”
所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

五、分支管理 Branch

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

5.1 创建分支

使用git branch (branchname) 可以创建一个分支。
使用git branch可以查看本地所有分支。
在这里插入图片描述

5.2 切换分支

使用git checkout (branch)命令切换分支。
使用git checkout -b (branchname) :表示创建分支并立即切换到新分支。
在这里插入图片描述

5.3 删除分支

使用git branch -d (branchname)命令删除分支:
在这里插入图片描述

注意:在当前分支上不能删除当前分支:
在这里插入图片描述

5.4 合并分支

使用git merge命令可以进行分支合并,示例:
首先我们创建出dev分支,切换到dev分支并修改text.txt文件,修改后commit提交。然后切换到master分之,执行git merge dev命令,即:将dev分支合并到当前分支(master),最后我们就可以在master分支看到在dev分支修改的内容。

git checkout -b dev #创建并切换到dev分支
git commit -m "create dev branch & update text.txt" # 在dev分支修改test.txt并commit提交
git checkout master # 切换回master分支
git merge dev #将dev分支合并到master分支
git branch -d dev # 合并完成之后将dev分支删除

在这里插入图片描述

六、撤销与回退

有关于Git的撤销与回退,一般就以下几个核心命令:

  1. git checkout
  2. git reset
  3. git revert

6.1 git checkout

  1. 未添加到暂存区的文件(但是是已被追踪的文件)(还未使用git add命令),可以使用git checkout命令将文件已修改的部分全部撤销(上次已经提交的部分不会被撤销)。
  2. 已经添加到暂存区的文件(已经使用了git add命令),也可以使用git checkout命令进行撤销,是在使用了git add 命令之后改变的内容会被撤销。
git checkout 1.txt # 撤销1.txt所有修改的东西
git checkout . # 撤销当前目录所有操作

6.2 git reset

git reset HEAD --file #回退暂存区里的某个文件,回退到当前版本工作区状态
git reset –-soft 目标版本号 #可以把版本库上的提交回退到暂存区,修改记录保留
git reset –-mixed 目标版本号 #可以把版本库上的提交回退到工作区,修改记录保留
git reset –-hard  #可以把版本库上的提交彻底回退,修改的记录全部revert。
  1. 如果代码已经添加到暂存区(已经使用了git add命令),但是还未commit提交,可以回退:
    git reset HEAD file #取消暂存,文件内容不变,只是文件状态改变
    git checkout file #撤销修改,在使用add命令之后的内容的改变会被撤销
    
  2. 代码已经git commit了,但是还没有push,想要退回:
    git log --oneline -3 # 查看版本号
    git reset --hard 67f2414  #回退到67f2414版本
    
    另外,也可以使用git rm -r --cached 1.txt 命令,将文件从本地仓库回退到工作区,停止追踪文件,文件内容不变。
  3. 如果代码已经push到远程仓库了,也可以使用reset回滚:
    git log --oneline -3
    git reset --hard 9c5be25
    git push origin HEAD --force
    

在这里插入图片描述

git reset --hard HEAD
git reset --hard HEAD~3  # 回退上上上一个版本  
git reset –-hard bae128  # 回退到某个版本回退点之前的所有信息。 
git reset --hard origin/master    # 将本地的状态回退到和远程的一样 

注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:

HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本

可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本

git reset HEAD 命令用于取消git add 添加到暂存区的文件,内容不会改变。
在这里插入图片描述

6.3 git revert

如果代码已经推送到远程的话,还可以考虑revert回滚:

git log --oneline -4 
git revert -n 62d6ac3