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" #将暂存区的文件提交到本地仓库

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

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

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

常用命令

git clone

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

git clone git@github.com:vuejs/vue.git
# or
git clone https://github.com/vuejs/vue.git
#or
gh repo clone vuejs/vue # GitHub CLI  了解更多 >>> https://cli.github.com/

git add

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

如果目录有不想添加的内容可以在根目录建立 .gitignoe 文件 ,添加以下内容如:

node_modules/

这样目录下的node_modules/ 文件夹就会被git add 忽略

可参考: https://git-scm.com/docs/gitignore

git commit

这一步是git add 之后的命令

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

git commit -m "提交的信息备注"

git status

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

可以使用 -s 参数来获得简短的输出结果。

git status -s

git diff

git diff 命令比较文件的不同,使用--stat参数可以显示摘要。

git diff:可以比较工作区和暂存区文件的差异

git diff [commitID] [commitID] :可以比较两次commit提交记录之间的不同

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

https://git-scm.com/docs/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=user.name --oneline -5 
git log --oneline --before={3.weeks.ago} --after={2023-1-01} --no-merges

git blame

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

git blame <file>
git blame README.md

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

git push

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

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

git checkout

https://git-scm.com/docs/git-checkout

git checkout [branchName] :切换到branchName分支.

git checkout --file [fileName] :表示会用暂存区的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

git checkout HEAD : 表示会用 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 branch branchname 可以创建一个分支。 使用git branch可以查看本地所有分支。

切换分支

使用git checkout branchname命令切换分支。 使用git checkout -b branchname `:表示创建分支并立即切换到新分支。

删除分支

使用git branch -d branchname命令删除分支:

强制删除分支 git branch -D branchname

删除远程仓库分支

  1. git branch -a 查看分支
  2. 本地执行git push origin -d 分支名 命令。

合并分支

使用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

git checkout

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

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命令之后的内容的改变会被撤销
  1. 代码已经git commit了,但是还没有push,想要退回:
git log --oneline -3 # 查看版本号
git reset --hard 67f2414  #回退到67f2414版本

​ 另外,也可以使用git rm -r --cached 1.txt 命令,将文件从本地仓库回退到工作区,停止追踪文件,文件内容不变。

  1. 如果代码已经push到远程仓库了,也可以使用reset回滚:
git log --oneline -3
git reset --hard 9c5be25
git push origin HEAD --force

关于--hard参数

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 添加到暂存区的文件,内容不会改变。

git revert

https://git-scm.com/docs/git-revert

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

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

也可以用git reset回退本地版本,在强制推送到远程仓库

git reset --hard HEAD^  # 还原到上一个版本
git push origin -f # 强制推送

附录

https://www.runoob.com/git/git-basic-operations.html https://www.cnblogs.com/konglxblog/p/15216646.html

https://blog.csdn.net/DreamsArchitects/article/details/127766803

https://git-scm.com/doc

更新时间: