什么是Git?
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
下面我们说一说Git常见的操作
git config 常用配置
-
配置邮箱和用户名
全局配置 git config --global user.name "your name" git config --global user.email "xxx@xxx.com" 单个项目配置(先进入项目的根目录,带有.git隐藏文件的目录) git config user.name "your name" git config user.email "xxx@xxx.com" 对单个项目进行配置可覆盖全局配置 -
配置命令别名
比如给 git status 设置别名 st: git config --global alias.st status -
查看已有配置信息
git config --list 或者 git config -l
Git 创建仓库
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。
使用当前目录作为Git仓库,我们只需使它初始化。
git init
该命令执行完后会在当前目录生成一个 .git 目录。
使用我们指定目录作为Git仓库。
git init projectPath
初始化后,会在 projectPath目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
克隆仓库代码
克隆代码到当前文件夹
git clone 仓库地址
如果我们需要克隆到指定的目录,可以使用以下命令格式:
git clone 仓库地址 目标文件夹
提交三部曲
git add .
git commit -m "message"
git pull
git push
git add . 提交工作区改动到暂存区;
git commit -m "message" 提交暂存区到本地仓库;
commit完之后要记得git pull更新一下最新的远程仓库代码到本地;
最后确保没有冲突没有报错的情况下git push 提交本地修改到远程仓库;
撤销工作区变更的文件
git checkout -- filename (前提, filename 已在仓库中)
#-- 代表“ 无论如何,将其之后的 argument 视为一个文件名(filename)”
从暂存区撤销回工作区
git reset HEAD -- filename
常用命令
git status #查看当前状态
git add <filename> #提交文件到暂存区
git add . #提交所有工作区改动到暂存区
git log #查看提交记录
git log --graph #查看分支图合并
git reflog #查看近期所有操作提交记录
git branch -l #查看本地仓库分支
git branch -al #查看所有分支(包含本地分支和远程分支)
git checkout [分支名] #切换分支
git checkout -b [分支名] [远程分支] #基于某个远程分支新建分支并切换到该分支
git branch -d [分支名] #删除某分支
git merge [分支名] #分支进行融合
git remote #查看远程库信息 -v 详细信息
git tag #查看本地仓库所有标签
git tag <name> <commitId> #默认HEAD打一个标签 可指定特定commitId -m '为标签添加注释'
git tag -d <tagName> #删除某个标签
git push -d origin <tagName> #删除远程标签
git push --tags #将本地标签一次性推送到远程
git push origin <tagName> #推送指定标签到远程
分支
1.git branch
git branch -l #查看本地分支列表
git branch -a #查看所有分支列表(包含本地分支和远程分支)
git branch 分支名xx #创建分支xx
git branch -d 分支名xx #删除本地xx分支
git branch --merged #它列出了已合并到当前分支的分支
git branch –no-merged #它列出了尚未合并的分支
git branch dev master #从 master 分支下创建 dev 分支
git branch -m dev DEV #修改 dev 分支名称为 DEV 分支
2.git checkout
git checkout 分支名xx #切换到xx分支
git checkout -b 分支名xx #创建xx分支并切换到该分支
git checkout 分支名xx --force #强制切换分支xx, 修改的工作区不会被清除
git checkout -b local_branch origin/remote_branch #从远程分支remote_branch拉取到本地local_branch, 然后切换到local_branch, 并且建立映射关系
git checkout branch_name -- filename #从别的分支拉取文件到本的分支指定文件
3.git merge
git merge 分支名xx #合并xx分支到当前分支
git merge --abort #执行合并时, 出现冲突文件, 执行操作退回未合并的状态
git merge --continue #执行合并时, 出现冲突文件, 修改冲突文件, 并且执行git add, 则继续合并
git merge feature-a feature-b #快速合并两个分支,同时非快速合并当前分支
git merge --no-commit feature-a #合并feature-a分支,但不产生一个commit 提交
git merge --squash brantch_0 #会把brantch_0的所有改动都放在当前分支但是并不会提交,本地会显示有东西未add需要手动commit,但是因为手动add,commit后在brantch_0的所有修改记录的修改人都会变成你自己,在提交记录上只会有一个提交记录。
4.其它
git push origin --delete 分支名xx #删除远程分支xx
版本回滚
git reset commit_id #修改的内容都处于工作区状态
git reset --soft commit_id #修改的内容都处于暂存区状态
git reset --hard commit_id #版本库完全替换工作区(慎用)