【Git学习】二、Git快速上手使用
善用
git status
命令,可以根据提示进行提交还是放弃!!!
一、Git简介
1、Git是什么
Git是一个开源的分布式版本控制系统,用来进行项目版本管理。其实就是一个软件,由一组命令组成,能够对项目代码进行版本控制。
2、Git工作流程
基本流程
- 使用git命令将远程仓库上的文件克隆岛本地仓库中
- 从本地仓库中检出文件到工作区(一般都自动完成)
- 将新创建的文件添加到暂存区
- 将暂存区中的内容提交到本地仓库
- 将本地仓库中内容推送到远程仓库上
二、快速上手使用方法
1、设置身份
git config --global user.name "CLAY"
git config --global user.email "recclay@foxmail.com"
2、验证身份
git config --global user.name
git config --global user.email
3、进入项目目录
cd ×××
4、创建代码仓库
echo "# testGit" >> README.md
git init
此时会自动生成.git
文件,通过ls -af
指令可以查看详细文件。
版本目录:.git
所在目录就是版本库目录,将来文件都需要保存到版本库中。
工作目录:.git
目录的上一级目录,只有工作目录中的文件才能保存到版本库中。
5、加入到暂存区
加入当前目录的全部文件
git add .
想加入单个文件(夹)
git add ×××
Git
的版本库里存了很多东西,其中最重要的就是称为stage
(或者叫index
)的暂存区,还有Git
为我们自动创建的第一个分支master
,以及指向master的一个指针叫HEAD
。如下图所示:
6、提交到当前分支
git commit -m "First commit."
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
注:有时做了提交后,发现提交的代码有问题,想要撤回到某次提交的方法。
首先需要用git log
查看你需要回退到的提交的commit ID
,也就是对应的哈希值,如下图方框中所示。
想要退出,按下q键即可
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数,即git log --pretty=oneline
使用
git log --graph --pretty=oneline --abbrev-commit
可以查看分支合并图
然后可以使用git reset
命令,但是这个命令的参数有两个。
git reset --soft commitID //只删除commitID之后的提交记录log,代码的改动还在。
git reset --hard commitID //彻底删除commitID之后所做的改动,代码也一起回退回来了。 (慎重用,用前最好备份一下代码,或者用git diff 生成一个patch)
在Git中,用HEAD表示当前版本,上一个版本就是
HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
。【就近版本可以避免查找commit ID】
回退到过去的某个版本后,想再回到最新的版本,会发现git log里面没有最新的了,这个时候怎么办呢?
方法一:若命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个最新版本的commit id,于是就可以指定回到未来的某个版本。
方法二:git中有个git reflog
用来记录你的每一次命令,该命令输出开头有对应每个版本的commit id
7、上传到Github
git remote add origin https://github.com/ReCclay/testGit.git
git push -u origin master
git remote add 仓库别名 仓库地址
,添加远程仓库地址,并把仓库起名为origin
git push 名称 分支
将本地仓库指定分支推送到远程仓库,即推送本地的master
分支到origin
(仓库别名)
另外,第一次推送master分支时,加上了
-u
参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
查看远程库信息:
git remote -v
更换上传的github地址,可以
git remote rm origin
,重新添加远程仓库地址!
当然一个本地仓库可以关联多个远程仓库,只是起名的时候别再都起成
origin
。比如同时关联github
和gitee
8、从远程仓库更新代码到本地
若在push过程中,出现如下错误Updates were rejected because the tip of your current branch is behind
,这个表示远程仓库被更改,与本地仓库不一致。
解决办法有下面几种
I、强制push
当然确保强制push没有问题的话,也可以强制push。输入以下命令git push -u origin master -f
II、将远程仓库更新代码到本地。
Git中从远程的分支获取最新的版本到本地有这样2个命令:
①、git fetch
:相当于是从远程获取最新版本到本地,不会自动merge
(合并代码)
法①:
git fetch orgin master //将远程仓库的master分支下载到本地当前branch中
git log -p master ..origin/master //比较本地的master分支和origin/master分支的差别
git merge origin/master //进行合并
法②:
git fetch origin master:tmp //从远程仓库master分支获取最新,在本地建立tmp分支
git diff tmp //將当前分支和tmp進行對比
git merge tmp //合并tmp分支到当前分支
更多
git diff
的用法,可参考<这篇博客>
②、git pull
:相当于是从远程获取最新版本并merge
到本地。其实相当于git fetch和git merge。【慎用,会直接合并本地!】
git pull origin master
在实际使用中,git fetch
更安全一些。因为在merge前,我们可以查看更新情况,然后再决定是否合并。
pull
操作相当于fetch+merge
III、新建分支new
git branch new
git push -u origin new
若出现
fatal: TaskCanceledException encountered
的错误,并且每次push都需要输入用户名和密码,可以执行以下指令。
git config –global credential.helper store
三、常见Git命令
命令 | 作用 | 备注 |
---|---|---|
git init | 初始化本地Git仓库(项目) | 会在当前目录中新建一个.git目录,用于记录所有的版本变更信息 |
git status | 查看本地仓库的文件状态 | 见下面的注2 |
git add +文件路径 | 将文件添加到暂存区index (跟踪列表tracked ),交由git管理 | . 表示添加所有文件 |
git commit | 将暂存区的文件提交到本地仓库 | -m指定提交日志 |
git log | 查看提交日志 | |
git reset --hard 版本id | 回退到指定版本 | HEAD表示当前的版本 |
git reflog | 查看所有操作记录 | 包括被回退的版本id、reset操作等 |
gir remote add 仓库别名 远程仓库地址 | 添加远程仓库地址 | 仓库名可以自定义,一般默认使用origin |
git remote -v | 查看远程仓库信息 | fetch抓取,push推送 |
git remote rm 名称 | 删除远程仓库地址 | |
git push 名称 分支 | 将本地仓库指定分支推送到远程仓库 | 一般为master主分支,默认推送到远程仓库的同名分支,没有则新建 |
git pull 名称 分支 | 拉去远程仓库指定分支中的新数据到本地 | 会与本地仓库进行merge核名(更新操作,非第一次) |
git clone 远程仓库地址 | 克隆远程仓库的项目到本地 | 用于从远程下载git项目(第一次) 【与git pull区别见注3】 |
注1:所有命令必须在Git仓库的根目录下进行
注2:文件状态
Git文件的四种状态:
- untracked
- 未跟踪,表示文件不受git管理,一般新建的文件处于该状态
untracked files
- 未跟踪,表示文件不受git管理,一般新建的文件处于该状态
- staged
- 已暂存,表示已对修改的文件做了标记,使之包含在下次要提交的文件的跟踪列表中
changes to be committed
- 已暂存,表示已对修改的文件做了标记,使之包含在下次要提交的文件的跟踪列表中
- committed
- 已提交,表示文件已经被提交到本地仓库
committed
- 已提交,表示文件已经被提交到本地仓库
- modified
- 已修改,表示文件内容已被修改,但没有做标记
changes not staged for commit
- 已修改,表示文件内容已被修改,但没有做标记
注3:git pull与git clone的区别
- clone是没有本地仓库时,将远端的整个项目下载下来
- pull是有本地仓库时,将远程仓库里新的数据更新过来,并且与本地代码进行merge合并操作
相关文章
- Git使用基础
- 【Git】如何将本地非git目录与远程创建的git目录建立关联
- Git回滚远程版本
- git学习
- Git - GitHub
- [Git] git Ignore a File that has Already been Committed and Pushed
- [Git] Recover Local Changes from `git reset --hard` with `git reflog`
- [Practical Git] Configure global settings with git config
- [Practical Git] Filter commit history with git log arguments
- 【学习总结】Git学习-GIT工作流-千峰教育(来自B站)
- 【学习总结】Git学习-参考廖雪峰老师教程八-使用GitHub
- 【学习总结】Git学习-参考廖雪峰老师教程四-时光机穿梭
- [Git] Use git add --patch for better commit history and mitigating bugs
- [Practical Git] Configure global settings with git config
- IDEA设置使用git bash替换原有terminal(cmd)
- Git远程操作详解
- 成功解决:fatal: detected dubious ownership in repository at ‘E:/workspace/CSMarket‘。如何使用git工具通过命令行的形式
- git删除本地分支和远程分支
- git 笔记
- 012-基于 git hooks 的前端代码质量控制解决方案
- git学习笔记(四)—— 分支管理
- git-submodule子模块的添加、使用和删除
- git如何忽略文件或者文件夹
- Git安装以及配置SSH Key——Windows
- 【超详细】阿里/华为云服务器部署环境快速搭建一条龙【git、maven、jdk8、docker安装nginx、mysql、redis】
- 【Git技巧】第一篇 Git 克隆指定分支的代码
- git复习
- GIT学习----第六节:撤销修改
- GIT 查看/修改用户名和邮箱地址
- [Git & GitHub] git 常用命令
- [Git & GitHub] 解决办法:error: failed to push some refs to 'https://github.com/xxxx.git'