git 快速入门及常用命令
身为技术人员,都知道Git是干嘛的。从服务端角度它是代码仓库,可以多人协作、版本控制、高效处理大型或小型项目所有内容;从客户端讲,它能够方便管理本地分支、且与服务端代码的同步,从拉取、合并、提交等等管理分支都靠它!
Git轻量、易于学习,如果不用搭建和维护代码仓库的话(运维职责),只要掌握几个git常用命令即可在工作中轻松应对。
下面简单介绍几个概念,同时列出工作中常用命令:
主要概念
快速入门,弄明白以下几个概念即可:
- 工作区(Working Directory):就是你在电脑里能看到的目录,或克隆(clone)下来的目录;
- 版本库(Repository):工作区里面有一个隐藏目录
.git
,这个不是工作区,而是Git的版本库; - 暂存区(stage):版本库中有一个叫stage的暂存区,
git add
可以把要提交的内容放到暂存区; - 主分支(master):版本库还有一个叫master的主分支,
git commit
把暂存区所有内容提交到当前分支;
主要用法
工作中,一般我们提交代码只要四步:
- 第一步,
git pull
拉取代码,提交代码前确保和服务端仓库一致,避免冲突; - 第二步,
git add ./your_file.txt
把文件添加进去,实际就是从工作区提交到暂存区; - 第三步,
git commit -m 'first commit'
提交更改,再把暂存区所有内容提交到当前分支(默认master); - 第四步,
git push [remoteName]
推送到远程仓库,也就是推到服务端,这样别人就能拉取pull
你的代码;
常见问题
平时工作也就用到上面四个步骤,当然了凡事有例外,下面说几个例外的处理办法:
一、checkout切换分支
git checkout <branch>
:切换到你需要的分支(dev、hotfix)
git checkout -b <branch>
: 如果没有分支,加上-b参数表示创建并切换;
参考链接:https://git-scm.com/docs/git-checkout
二、git提交后撤销问题
撤销得分三种情况:
- 第一,已经修改文件但未执行
git add
的撤销方法;
我故意在.gitignore
文件修改之后且没有git add
,直接通过git checkout -- <file>
撤销;
但是此命令不会撤销新建的文件,因为新建文件还没加入到Git管理系统中,
所以git是未知的,自己手动删除就好了。
λ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
D:\learning\git\work (master -> origin)
λ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitignore
no changes added to commit (use "git add" and/or "git commit -a")
D:\learning\git\work (master -> origin)
λ git checkout -- .gitignore
D:\learning\git\work (master -> origin)
λ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
扩展:
命令git checkout -- .gitignore
意思就是,把.gitignore文件在工作区的修改全部撤销,这里有两种情况:
一种是.gitignore自修改后还没有被放到暂存区,现在撤销修改就回到和版本库一模一样的状态;
一种是.gitignore已经添加到暂存区,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/897889638509536
- 第二,已经修改文件且
git add
的撤销方法
需要先执行git reset .gitignore
撤销到未git add
状态,再执行第一步即可。
λ git add .gitignore
D:\learning\git\work (master -> origin)
λ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitignore
D:\learning\git\work (master -> origin)
λ git reset .gitignore
Unstaged changes after reset:
M .gitignore
D:\learning\git\work (master -> origin)
λ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitignore
no changes added to commit (use "git add" and/or "git commit -a")
D:\learning\git\work (master -> origin)
λ git checkout -- .gitignore
D:\learning\git\work (master -> origin)
λ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
- 第三,Git已经commit如何撤销:
通过git reset --hard commitid
直接回到未修改状态。
λ git add .gitignore
λ git commit -m "test"
#(省略无用部分)
λ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
D:\learning\git\work (master -> origin)
λ git log
commit b7de9378f39834dbc8304d4a8d30f39a4003c673 (HEAD -> master)
Author: test <test@163.com>
Date: Mon Sep 14 02:59:02 2020 +0800
test
commit b3ed1078e543cdb26b984dac584df9db7553d506 (origin/master, origin/HEAD)
Author: test <test@163.com>
Date: Mon Sep 14 02:39:54 2020 +0800
09142020
D:\learning\git\work (master -> origin)
λ git reset --hard b3ed1078e543cdb26b984dac584df9db7553d506
HEAD is now at b3ed107 09142020
D:\learning\git\work (master -> origin)
λ git log
commit b3ed1078e543cdb26b984dac584df9db7553d506 (HEAD -> master, origin/master, origin/HEAD)
Author: test <test@163.com>
Date: Mon Sep 14 02:39:54 2020 +0800
09142020
D:\learning\git\work (master -> origin)
λ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
三、git stash保存和恢复工作区内容
git stash
可以将你已经修改,但不想提交(git push)的代码临时保存到堆栈中,也就是回归到你git pull
时的状态。然后就能随意切换分支救火,完成后切换回来再git push pop
即可恢复之前的修改内容。stash
不仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上(可跨分支)。
- git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。
执行完之后再git status
,会发现当前是一个干净的工作区,没有任何改动。
使用git stash save 'message...'可以添加一些注释
git stash list
显示保存进度的列表。也就意味着,git stash命令可以多次执行。git stash pop
恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。git stash pop stash@{stash_id}
恢复指定的进度到工作区。stash_id通过git stash list命令得到的
通过git stash pop命令恢复进度后,会删除当前进度。git stash drop stash@{stash_id}
可以使用git stash drop命令,后面可以跟stash_id
或使用git stash clear命令,删除所有缓存的stashgit stash show
查看堆栈中最新保存的stash和当前目录的差异
举个例子
- 修改.gitignore文件,新建test.txt文件。再执行stash发现新增文件不会被存储;
git add
之后再stash发现工作区是干净的;- 说明没有在git版本控制(git add)中的文件,不能被git stash 保存;
- 最后通过
git stash pop
恢复。
λ git status
On branch master
Your branch is up to date with 'origin/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: .gitignore
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
no changes added to commit (use "git add" and/or "git commit -a")
D:\learning\git\timed_tasks (master -> origin)
λ git stash
Saved working directory and index state WIP on master: 542a055 create .gitignore
D:\learning\git\timed_tasks (master -> origin)
λ git status
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
D:\learning\git\timed_tasks (master -> origin)
λ git add test.txt
D:\learning\git\timed_tasks (master -> origin)
λ git stash
Saved working directory and index state WIP on master: 542a055 create .gitignore
D:\learning\git\timed_tasks (master -> origin)
λ git stash list
stash@{0}: WIP on master: 542a055 create .gitignore
stash@{1}: WIP on master: 542a055 create .gitignore
stash@{2}: WIP on (no branch): 542a055 create .gitignore
D:\learning\git\timed_tasks (master -> origin)
λ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
D:\learning\git\timed_tasks (master -> origin)
λ git stash show
test.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
D:\learning\git\timed_tasks (master -> origin)
λ git stash pop
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: test.txt
Dropped refs/stash@{0} (b69da2894d5e7f511be18277c5a0cd4582fbf453)
D:\learning\git\timed_tasks (master -> origin)
λ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: test.txt
Tip:如果你修改的所有文件都不想要了怎么办?可通过git stash清空,懂吧?
λ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: test.txt
D:\learning\git\timed_tasks (master -> origin)
λ git stash
Saved working directory and index state WIP on master: 542a055 create .gitignore
D:\learning\git\timed_tasks (master -> origin)
λ git stash clear
D:\learning\git\timed_tasks (master -> origin)
λ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
----by 钢铁 648403020@qq.com
参考资料:
Git官方文档:https://git-scm.com/docs
廖雪峰Git教程:https://www.liaoxuefeng.com/wiki/896043488029600
git 快速入门及常用命令的更多相关文章
- Git快速入门和常用命令
一.快速入门 本地初始化一个项目 首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中. git config --global us ...
- Docker(2):快速入门及常用命令
什么是Docker? Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行和管理 ...
- MySQL快速入门及常用命令
数据库 笔记内容 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,F ...
- ETCD快速入门-03 常用命令
3. ETCD 常用命令 etcdctl是一个命令行的客户端,它提供了一些命令,可以方便我们在对服务进行测试或者手动修改数据库内容.etcdctl与kubectl和systemctl的命令原理 ...
- git基础入门之常用命令操作
本内容参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 初学,有什么不对的地方 ...
- git快速入门 push/clone/reset/merge/切换分支全都有
本文介绍git快速入门,从安装/创建init / 发布push/版本回退reset / branch分支切换/合并分支merge 这些基本的操作都有涉及,方便新人快速入手,有需要的朋友mark一下.首 ...
- Git 快速入门--Git 基础
Git 快速入门 Git 基础 那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余. 在开始学习 G ...
- Git快速入门进阶篇
本文接着Git快速入门篇,继续探讨Git在管理项目中的一些应用. 远程仓库的使用 查看远程仓库 查看你已经配置的远程仓库服务器,可以运行 git remote 命令.指定选项 -v,会显示需要读写远程 ...
- Docker 入门指南——常用命令
前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...
随机推荐
- C#LeetCode刷题之#788-旋转数字(Rotated Digits)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3967 访问. 我们称一个数 X 为好数, 如果它的每位数字逐个地 ...
- Kinect+unity 实现体感格斗闯关小游戏
文章目录 项目地址 1 项目概况 1.1 项目简介 1.2 项目目的 1.3 主要技术 2 设计 2.1 基本概念 2.2 框架 2.3 算法 2.4 模型 2.5 调查问卷 3 实现 3.1 技术难 ...
- LeetCode 115.不同的子序列 详解
题目详情 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如, ...
- 攻防世界-web(进阶)-Training-WWW-Robots
进行后台扫描,发现一个robots.txt,进入之后说存在fl0g.php,进入即可得flag. cyberpeace{73279bc0d3c28ba6da4d1d3d530e7c16}
- 题解 P1407
建图方式:旧关系女人连男人,现关系男人连女人(当然,反过来也可以) 原因可以这样考虑: 如果一个男的把女的绿了,那么这个女人就会去找一个她曾经交往过的男人,也就是在这种情况下,某种"影响&q ...
- sizeof的用法 2007-12-19 11:06
sizeof的作用是什么?sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数.其返回值类型为size_t,在头文件stddef.h中定义 ...
- 基于python tkinter的点名小程序
import datetimeimport jsonimport osimport randomimport tkinter as tkimport openpyxl # 花名册文件名excel_fi ...
- 第七天Scrum冲刺博客
1.会议照片 2.项目进展 团队成员 昨日计划任务 今日计划任务 梁天龙 学习课程页面 建议页面 黄岳康 定义个人课程 登陆页面 吴哲翰 完成页面的与后端的沟通交流 继续保持确认功能齐全 ...
- Federated Machine Learning: Concept and Applications
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Qiang Yang, Yang Liu, Tianjian Chen, and Yongxin Tong. 2019. Federate ...
- 教育行业CRM项目开发
项目开发流程 需求分析 存储所有的客户咨询信息 避免重复数据 客户多次跟踪记录 客户来源分析.成单率分析 每个销售只能修改自己的客户信息 报名流程开发 班级 ...