Git学习笔记:常用命令总结

Git工作流程

Git工作区、暂存区和版本库

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

  • git add,暂存区目录树更新,工作区修改【或新增】的文件内容被写入到对象库的一个新对象中,而该对象的ID被记录在暂存区的文件索引中。
  • git commit,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • git reset HARD,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • git rm --cached <file>,直接从暂存区删除文件,工作区则不做出改变。
  • git checkout .git checkout -- <file>,用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
  • git checkout HEAD .git checkout HEAD <file>,用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

Git基本操作

  • workspace:工作区
  • staging area:暂存区,缓存区
  • local repository:本地仓库
  • remote repository:远程仓库

基本操作流程:

git init # 初始化仓库,生成.git目录
git add <file> # 添加文件到暂存区
git commit -m"<message>" # 将暂存区的内容添加到本地仓库中

Git常用命令:创建仓库

git init

初始化仓库

git init # 在当前目录下初始化git仓库 
git init newrepo # 在newrepo目录下初始化git仓库

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

git clone

下载项目

git clone <repo> # 克隆git仓库的项目到当前目录
git clone <repo> <directory> # 克隆git仓库的项目到指定目录

git config

设置git的配置信息

git config # 显示git的配置信息

# 针对系统上的所有仓库,修改提交代码的用户信息
git config --global user.name "summerday"
git config --global user.email 13279076@qq.com

Git常用命令:提交与修改

git add

添加文件到仓库

git add [file1] [file2] # 添加文件file1和file2进入暂存区
git add [dir] # 添加dir目录进入暂存区,包括子目录
git add .     # 添加当前目录下所有文件到暂存区
$ touch README.md
$ git add README.md

git status

查看在你上次提交之后是否有对文件进行再次修改。

$ git status

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

通常使用-s获得简短的输出结果。

$ git status -s

A  README.md  # A 表示新添加

git diff

比较文件在暂存区和工作区的差异,主要应用场景

git diff [file]  # 尚未缓存的改动
git diff --chached [file]  # 查看已缓存的改动
git diff --stat [file]   #显示摘要而非整个diff

前置条件:已经将README.md加入到暂存区。

vim README.md  # 编辑 modified by summerday

$ git status -s
AM README.md

$ git diff # 显示暂存区和工作区的差异
diff --git a/README.md b/README.md
index e69de29..4dc8994 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+modified by summerday!

$ git diff --cached README.md # 显示暂存区和上一次提交(commit)的差异
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29

$ git diff --stat README.md  #显示摘要而非整个diff
README.md | 1 +
1 file changed,1 insertion(+)

git commit

将暂存区内容添加到本地仓库中。

git commit -m [message]
git commit [file1] [file2] -m [message]
git commit -am [message] # add + commit 

git revert <commit> # 撤销指定的修改
$ git commit -m "first commit !"
[master (root-commit) b81d562] first commit !
 1 file changed,0 insertions(+),0 deletions(-)
 create mode 100644 README.md
 
$ git status
On branch master
nothing to commit,working tree clean

nothing to commit,working tree clean,表示我们在最近一次提交之后,没有做任何改动,是干净的工作目录。

可以使用-a选项跳过git add

$ vim README.md # add : modified again!

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

$ git commit -am "modify and commit again!"
[master 4c3121a] modify and commit again!
 1 file changed,1 insertion(+)

git reset

回退版本,可以指定退回某一次提交的版本

git reset [--soft | --mixed | --hard] [HEAD] 

--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变

git reset [HEAD]
git reset --mixed [HEAD]
$ git reset HEAD # 取消之前git add添加到暂存区的内容
$ git reset HEAD^ # 回退所有内容到上一版本 git reset HEAD~1
$ git reset HEAD^ 1.txt # 回退1.txt文件的版本到上一版本
$ git reset [version] # 回退到指定版本

--soft--mixed--head的区别可以对照:git reset soft,hard,mixed之区别深解,总结如下:git reset命令是用来将当前branch重置到另外一个commit的,而这个动作可能会将index以及work tree同样影响,而三个参数表示影响程度上的不同:

  • --soft:仅仅将头指针恢复,【已经add进暂存区的内容以及工作空间的所有东西都不变】。
  • --mixed:将头指针恢复,已经add进暂存区的内容也会丢失,【工作空间的代码什么的是不变的,可以根据情况再次进行add,commit操作】。
  • --hard:一切就全都恢复了,头指针恢复,已经add进暂存区的内容也会丢失,代码什么的也恢复到以前状态,所以该参数需谨慎使用。

HEAD说明

^表示 数字表示 含义
HEAD HEAD~0 当前版本
HEAD^ HEAD~1 上一版本
HEAD^^ HEAD~2 上上个版本

git rm

删除文件

git rm <file> # 从暂存区和工作区中删除文件
git rm -f <file> # 如果删除之前修改过,并已经放到暂存区中,需要强制删除
git rm -cached <file> # 把文件从暂存区移除,但仍然希望保留在当前工作目录中

git mv

移动或重命名工作区文件

git mv [file] [newfile] # 移动或重命名一个文件、目录或软链接
git mv -f [file] [newfile] # 如果新文件名已经存在,强制使用-f

Git常用命令:日志信息

git log

查看历史提交记录

$ git log
commit bcc72cf028fa25cd8cebf7e310ebfe18d848d9e3 (HEAD -> master)
Author: xxx
Date:   Mon Nov 30 14:40:24 2020 +0800

    update

commit 272df45cb2357655f07576bc59bd92aac9c9fe96
Author: xxx
Date:   Mon Nov 30 12:50:22 2020 +0800

    first commit !

$ git log --oneline  # 查看简洁版本
bcc72cf (HEAD -> master) update
272df45 first commit !
b81d562 first commit !

$ git log --graph # 显示拓扑图结构,显示何时工作分叉、又何时归并。
$ git log --reverse --oneline # 逆向显示
$ git log --author=summerday --oneline -5 # 查看最近5行作者为summerday的提交记录
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges # 三周前且在四月十八日之后的所有提交 --no-merges 选项以隐藏合并提交

git blame

查看文件的修改记录

$ git blame README.md 
272df45c (huayuhao 2020-11-30 12:50:22 +0800 1) modified by summerday!
bcc72cf0 (huayuhao 2020-11-30 14:40:24 +0800 2)
bcc72cf0 (huayuhao 2020-11-30 14:40:24 +0800 3) reset test!

git show

显示信息

git show [version]  # 显示某个提交的详细内容
git show HEAD   # 显示HEAD提交日志
git show HEAD^  # 显示HEAD的父(上一个版本)的提交日志 

Git常用命令:远程操作

git remote

远程仓库操作

$ git remote -v
origin  git@xxx.git (fetch)
origin  git@xxx.git (push)
# origin为远程地址的别名

git remote show [remote] # 显示某个远程仓库的信息

git remote add [shortname] [url] #添加远程版本库 shortname为本地的版本库
# git remote add origin xxx.git

git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名

git fetch

从远程获取代码库,需要手动merge。

git fetch origin
# 执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支
git merge origin/master

git pull

从远程获取代码并合并本地的版本,相当于git fetch + git merge FETCH_HEAD

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

git push

将本地的分支版本上传到远程并合并。

# 格式 : git push <远程主机名> <本地分支名>:<远程分支名>
# git push <远程主机名> <本地分支名>  如果本地分支名与远程分支名相同,则可以省略冒号
git push origin master
git push --force origin master # 如果本地版本与远程版本有差异,但又要强制推送
git push origin --delete master # 删除主机但分支可以使用 --delete 参数

Git标签管理

git tag v1.0 # 最新一次提交打上(HEAD)"v1.0"的标签
# 之后我们执行 git log --decorate 就可以看到我们新增的标签了。
git tag # 查看所有的标签
git tag -d v1.0 # 删除标签
git show v1.0 # 查看此版本修改的内容

Git分支管理

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

git branch (branchname) # 创建分支
git checkout (branchname) # 切换分支
git merge [otherbranches] # 合并到当前分支
git branch # 列出分支
git checkout -b (branchname) # 创建分支并立即切换到该分支下
git branch -d (branchname) #删除分支

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Git安装和使用 Git安装和使用 刚开始用git的小白适用,,转自http://www.cnblogs.com/qijunjun/p/7137207.html 实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天就来总结下Git的相关用法,废话不多说,直接开写。 目的:通过Git管理g
fatal: remote origin already exists.解决方法 第一个问题git remote add origin**************fatal: remote origin already exists.(报错远程起源已经存在。)上网查了下,有很多小白遇到过这个问题,以
git常用命令(二)查看历史记录 git log [--pretty=oneline] [ --oneline] / reflog Eniac-W 于 2020-10-18 18:12:38 发布 2368 收藏 3分类专栏: git 文章标签: git版权 git专栏收录该内容10 篇文章0 订阅
git之如何把本地文件上传到远程仓库的指定位置 git专栏收录该内容2 篇文章0 订阅订阅专栏2018.11.26添加内容: 对于自己的仓库,我们建议将远程仓库通过clone命令把整个仓库克隆到本地的某一路径下。这样的话我们从本地向远程仓库提交代码时,就可以直接把需要提交的文件拖到我们之前克隆下来的
代码规范之 lint-staged 在代码提交之前,进行代码规则检查能够确保进入git库的代码都是符合代码规则的。但是整个项目上运行lint速度会很慢,lint-staged能够让lint只检测暂存区的文件,所以速度很快。 安装与配置 安装husky和lint-staged: yarn add hu
方法:1、文件没有git操作时用“git checkout--文件”命令还原;2、文件提交到暂存区时用“git reset HEAD”命令回退当前版本还原;3、文件提交到仓库区时用“git reset HEAD^”命令回退上一个版本还原。 本文操作环境:Windows10系统、Git2.30.0版、
使用Git将本地文件提交到远程仓库 一 操作准备条件: git远程仓库已经建好了,本地文件已经存在了,现在要将本地代码推到git远程仓库保存。 解决办法如下: 1、(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2、把文件添加到版本库中,使用命令
GitHub克隆代码到本地全教程 因为工作原因更换电脑,想要从GitHub上拉取代码的话需要重新配置ssh keys,时间过的久了怕忘记就把步骤给记录下来。 具体步骤: 1.安装git 这我就不说了 2.在TortoiseGit的安装文件中找到 puttygen.exe应用程序 ,默认应该都是 :C
github上传项目的时候报出git@github.com: Permission denied (publickey). fatal: Could not read from remote repo 前言 会不会有程序员小伙伴在刚开始使用github的时候上传项目的时候困难重重,但是又基于自己本身
查看历史 git log --pretty=onelinegit log (然后一直按enter键) 一个是切换根据历史里面的id切换git checkout ID git log 需要不断按enter键出来历史提交记录 git log --pretty=oneline 是直接出来历史记录
Git工作原理及常用命令 欧怼怼发布于&#160;2020-12-08 git介绍 git(读音/ɡɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 git
git git提交项目的具体流程 git项目流程:以下主要有3个角色:负责人、成员A、成员B(若负责人也要修改代码,则负责人同时兼任2个角色:负责人、成员) 主要负责人:搭建项目架构且提交到git上1.github官网登录后,新建仓库,生成地址url,复制线上仓库.git结尾的地址url2.在一个空
git上传项目全部流程 一、下载git 进入网址:https://git-scm.com/downloads; 点击中的Download 2.16.0 for Windows; 在中选择蓝色字段点击,根据电脑64或32位选择适合的下载,点击即可进行下载,下载完成后傻瓜式安装,一直点击下一步即可完成安
Your local changes to the following files would be overwritten by checkout问题的解决 于 2018-07-17 11:38:27 发布 Git 的本地版本管理有三个部分 名称&#x9;说明工作区(Working Directory)&#x9;
Git配置SSH Keys步骤使用教程 1.若是首次安装使用git,先配置用户名称和邮箱(如果有就不需要配置) 打开Git Bash,输入 git config --global user.name &quot;姓名&quot;git config --global user.email &quot
基本配置完成,接下来就是上传你要上传的项目了。 1、初始化git 进入你要上传的项目的文件夹,在文件夹内鼠标右击,选择“Git Bash Here”打开git命令行,输入: $ git init 目的是初始化git,并且会创建个“.git”文件夹,里面有个“config”就是用来保存远程厂库路径地址
本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“gitee如何上传代码”吧! ...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作中,相信很多人在gitee如何下载仓库里的项目问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Gitee上更新代...