git 基础命令理解总结
git总结
git 是一个分布式的版本控制工具
有三个概念 : 工作区(就是工作界面能操作的地方,)
暂存区(git add 后的数据 在.git/index文件夹里)
版本库(git commit 后的数据,在.git 文件夹里)
git拉取项目有两种方式
# 第一种 直接使用命令初始化一个仓库
# 可以在某个目录下执行
git init
# 也可以指定某文件夹
git init 文件路径
#初始化后会在目录生成一个 .git 隐藏文件夹
#里面包含 git版本库 和暂存区
# 第二种 git clone [url]
git clone https://gitee.com/peng_yan_bao/tianqituisong.git
git常用命令
git status 查看文件状态
# 查看文件状态
git status
# 查看文件状态 详细状态,包括未跟踪的
git status -s
未进行提交的更改:
(使用“git add <file>…”更新将提交的内容)
(使用“git checkout --<file>…”放弃工作目录中的更改)
可以在 .gitignore 文件下配置忽略文件
git diff 比较当前工作目录与暂存区之间的差异
# 比较当前工作目录与暂存区之间的差异
git diff
# 查看已暂存的将要添加到下次提交里的内容
git diff --staged
git commit 提交到版本库
#提交到版本库
git commit
# 直接写注释提交
git commit -m "某一次提交"
# 跳过使用暂存区域 省略 git add
git commit -a -m '直接提交'
提交后会打开 vim编辑器 出现下列信息
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
# new file: README
# modified: CONTRIBUTING.md
#
~
~
~
".git/COMMIT_EDITMSG" 9L, 283C
按i输入
按esc :wq 保存
# 之间写注释提交
git commit -m "某一次提交"
# 提交后它会告诉你,当前是在哪个分支(master)提交 文件改动,以及内容
C:\Users\ex-pengyanbao\Desktop\gittest>git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: abc.txt
new file: gg.txt
new file: test.txt
C:\Users\ex-pengyanbao\Desktop\gittest>git commit
[master 1667bb4] 这是一次提交25.8.6
3 files changed, 3 insertions(+), 1 deletion(-)
create mode 100644 gg.txt
create mode 100644 test.txt
C:\Users\ex-pengyanbao\Desktop\gittest>
# 提交时记录的是放在暂存区域的快照 !!! 但是如果用某些工具的话有的会自动add并commit
git commit --amend 再次提交暂存区文件
# 再次提交暂存区文件,并且不产生新的提交记录,而是与上次提交记录合并 只会产生一个提交结果
git commit --amend
git reset HEAD 取消暂存的文件
# 取消暂存的文件
git reset HEAD 文件名
git checkout -- 文件名 撤销对文件的更改
# 回滚工作区修改的内容
git checkout -- aa.txt
远程仓库
查看远程仓库
#查看远程仓库
git remote
# 显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL,可以用url直接获取项目
git remote -V
# 一般情况下是文件在一个仓库中
D:\workspace\tianqituisong>git remote -v
origin https://gitee.com/peng_yan_bao/tianqituisong.git (fetch)
origin https://gitee.com/peng_yan_bao/tianqituisong.git (push)
# 有时候也可以将其他仓库的文件添加进来
#添加远程仓库 pb是别名
git remote add pb https://github.com/paulboone/ticgit
#可以看到如下有第二个仓库
git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)
拉取本地没有但仓库中有的数据 git fetch
(暂时不是很理解有什么用)
# pb 为刚才的别名
git fetch pb
从远程仓库中抓取与拉取
# 这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
# 不会自动合并或修改你当前的工作
git fetch <remote>
# 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
git pull
推送到远程仓库
# 将 master 分支推送到 origin 服务器时
git push origin master
查看某个远程仓库
git remote show <remote>
git remote show origin
* remote origin
Fetch URL: https://gitee.com/peng_yan_bao/tianqituisong.git
Push URL: https://gitee.com/peng_yan_bao/tianqituisong.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
D:\workspace\tianqituisong>
远程仓库的重命名与移除
# 将 pb 重命名为paul
git remote rename pb paul
#删除远程仓库 paul
git remote remove paul
git 分支
Git 的
master
分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为git init
命令默认创建它,并且大多数人都懒得去改动它。
查看分支
# 查看本地分支
git branch
#查看哪些分支已经合并到当前分支 (可以直接删除)
git branch --merged
#查看所有包含未合并工作的分支 (不可删除)
git branch --no-merged
查看分支最后一次提交
git branch -v
创建分支
#
git branch testing
查看当前 HEAD 指向的分支
git log --oneline --decorate
分支切换
# 创建分支不切换
git checkout testing
# 创建分支后直接切换到被创建分支
git checkout -b
切换分支后提交产生的记录
查看分叉历史
git log --oneline --decorate --graph --all
C:\Users\ex-pengyanbao\Desktop\gittest>git log --oneline --decorate --graph --all
* ed40e19 (HEAD -> ctest, master) master▒<8F><90>浜▒
| * 18aa6cf (aaatest) atest▒<8F><90>浜▒
|/
* 93f136a 12
* 36bde00 djdjdj
* 1667bb4 杩<99>▒<98>▒<80>娆℃<8F><90>浜▒25.8.6
* 258dce8 two commit
* e554a17 one commit
合并分支
# 先切换到被合并的分支,再合并想要合并的分支
git checkout master
git merge dtest
# 当你试图合并两个分支时, 如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候, 只会简单的将指针向前推进(指针右移),因为这种情况下的合并操作没有需要解决的分歧——这就叫做 “快进(fast-forward)”。
# 例如再master 分支上创建 dtest 分支,并且修改内容提交,然后将 dtest 分支的内容合并到master
C:\Users\ex-pengyanbao\Desktop\gittest>git merge dtest
Updating ed40e19..113d7c7
Fast-forward
abc.txt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
# 如果被合并的分支不是他的父亲,那就会自动创建一个合并提交
# 如果有冲突,还需要手动解决冲突
合并分支-变基
使提交变得更简洁
# 将a分支提交的内容变基到 master 分支
# 先切换到a分支, 然后执行变基,然后切换回 master分支执行合并
git checkout a
git rebase master
git checkout master
git merge a
# 将a分支提交的内容变基到 master 分支 直接变基 然后合并
git rebase master a
git merge a
删除分支
# 删除分支
git branch -d dtest
远程分支
远程 origin
“origin” 并无特殊含义
远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 同时 “master” 是当你运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用, “origin” 是当你运行 git clone 时默认的远程仓库名字。 如果你运行 git clone -o booyah,那么你默认的远程分支名字将会是 booyah/master。
同步远程数据到本地
# 只会获取数据 然后手动合并
git fetch <remote>
# 获取数据并合并 git fetch + git merge
git pull
一些git问题
直接使用git时候如果修改某个文件总是会让先 git add 在进行 commit
但是idea集成的git不用进行add,直接进行commit就可以提交到版本库
因为idea集成的git commit命令已经包含了 add (提交到暂存区)
生产突然出bug时候,紧急切换
简单来说就是如果生产环境突然有问题的时候,我们需要怎么做
一般来说我们会有一个紧急分支,它是等同于生产的分支,
1.先提交或暂缓当前分支,然后切换到紧急分支,修复bug,提交测试,合并到生产,发布
让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤:
1.开发某个网站。
2.为实现某个新的用户需求,创建一个分支。
3.在这个分支上开展工作。
正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理:
1.切换到你的线上分支(production branch)。
2.为这个紧急任务新建一个分支,并在其中修复它。
3.在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。
4.切换回你最初工作的分支上,继续工作。