首页 > 技术文章 > git命令大全

bitbitbyte 2020-05-24 15:24 原文

概述

git安装好后, 可以在任何一个文件夹,右键打开Git Bash. 可以在该程序中直接运行linux命令或git命令

git工作机制的核心在于3个区:

  • 工作区: 电脑的本地目录(该目录中有创建的.git目录)
  • 暂存区: 暂存区的数据保存在.git/index文件中
  • 本地仓库: 一般从远程仓库通过clone创建, 之后可以通过pull保持与远程仓库的同步; 另一种方式是使用init在当前目录创建仓库.

git作为分布式版本管理软件与集中式的svn的最大区别在于

  • 分布式中, 每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库, 可以在本地仓库上进行独立开发.
  • 而集中式的SVN, 只有一个中央仓库, 所有版本信息都放在中央仓库上, 脱离了服务器,开发者便无法工作. 同时中央仓库的数据丢失也不会有其它备份,

git也有好用的GUI工具TortoiseGit, 作为开放人员用的最多的也还是在idea上使用git. 这里整理git的命令, 主要为了熟悉git, 以及深入对git的理解.

常用的Git命令

与本地仓库操作相关

命令 含义
git init 初始化本地库
git status 查看本地库的状态(git status -s 简化输出结果)
3种状态:1. 无任何信息 2. 绿色文件 3. 红色文件
git add [file] 多功能命令:
1. 开始跟踪新文件
2. 把已跟踪的文件添加到暂存区 3. 合并时把有冲突的文件标记为已解决状态
git commit –m “xxx” [file] 将暂存区的文件提交到本地库,-m 后面为修改的说明

设置Git账户

命令 含义
git config --list 查看所有配置
git config --list --show-origin 查看所有配置以及所在文件位置
git config --global user.name xxx 设置git用户名
git config --global user.email xxx 设置git邮箱
git init 初始化本地库
git config core.autocrlf false 取消换行符转换的warning提醒

git config --list --show-origin: 可以查看配置文件, 在配置文件上直接修改配置

--global: 用于设置全局账户, 而不是某个项目的

忽略文件

在idea中可以使用maven, java, scala等模板. 也可以自己编写该文件.

# 忽略所有的
.a 文件 *.a

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 file 文件,而不忽略 subdir/file. 不递归的忽略
/file

# 忽略任何目录下名为 dir 的文件夹 递归的忽略
dir/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

版本切换

命令 作用
git log 以完整格式查看本地库状态(查看提交历史)
git log --pretty=oneline 以单行模式查看本地库状态
git reset --hard HEAD^ 回退一个版本
git reset --hard HEAD~n 回退N个版本
git reflog 查看所有操作的历史记录
git reset --hard [具体版本号,例如:1f9a527等] 回到(回退和前进都行)指定版本号的版本,

git refloggit log的区别在于可以列出所有操作包括该版本之后的版本信息

注意: 因为版本的存在, git中所有文件都可以恢复, 没有真正的删除操作

文件撤回

命令 作用
git checkout -- [file] 从本地库检出最新文件覆盖工作区的文件(文件还没有提交到暂存区, 否则无效)
git reset [file] 或者 git restore –staged [file] 从暂存区撤销文件
git restore \ 放弃在工作区的修改(还没有提交到暂存区)
git rm --cache [file] 撤销对文件的跟踪.

比较文件

命令 作用
git diff \ 将工作区中的文件和暂存区进行比较
git diff HEAD \ 将工作区中的文件和本地库当前版本进行比较
git diff --cached \ 查看暂存区和本地库最新提交版本的差别

分支操作

不使用分支,就是人与人之间协作;

使用分支,就是小组与小组之间的协作;或者两个版本互不影响同时开发.

从主干中拉取分支,开发完成,将工作,合并到主干。

分支常用操作

命令 作用
git branch -v 查看分支
git branch [分支名] 新建分支
git checkout [分支名] 切换分支
git merge [分支名] 合并分支
git branch –d [分支名] 删除分支
git checkout –b [分支名] 新建切换

合并分支时注意: 例如将dev分支合并到master上, 需要先切回到master分支

处理分支合并时的冲突

两个分支合并式, 如果某个文件的某行在创建分支后, 同时在两个分支上都被修改, 则该行内容在合并时就会发生冲突

注意: 处理分支冲突时, 需要和组内成员商量, 确认.

处理方法

编辑冲突的文件, 把“>>>>>>>>>”、“<<<<<<” 和“========” 等这样的行删除, 编辑至满意的状态,之后 add, commit。
提交的时候注意: git commit 命令不能带文件名。

github远程仓库相关操作

简单操作

  1. 查看是否配置了密钥
cd ~/.ssh
  1. 生成密钥
ssh-keygen
  1. 将生成公钥拷贝值github账户的SSH and GPG keys
  2. 测试本地仓库与github的联通性
ssh -T git@github.com

.ssh 文件夹中会多一个文件 known_hosts, 其中记录了连接的 github 的 ip 账号。 `

push操作

本地仓库推送到GItHub

①准备本地库

②在GitHub上创建一个仓库

③增加远程地址

git remote add  <远端代号>   <远端地址>

    <远端代号> 是指远程链接的代号,一般直接用origin作代号,也可以自定义;
    <远端地址> 默认远程链接的url;

④本地库推送到远程库

git  push  -u  <远端代号>    <本地分支名称>

-u 把本地的master分支和远程的master分支关联起来
<远端代号> 是指远程链接的代号;
 <分支名称>  是指要提交的分支名字,比如master;

之后再此推送时可以简写:git push

⑤查看远程分支

git remote –v

⑥查看本地库做了的修改

git status

与远程仓库同步

方式一: fetch+ merge

方式二: pull

clone

刚开始做项目的时候,需要从远程库将项目先整到本机。

git  clone   <远端地址>   <新项目目录名>

解决冲突

push之后可能会发生冲突.

冲突原因:本地库的版本和远程库的版本都做了更新, 这时需要将本地版本更新与远程保存一致.

操作: 先pull将远端仓库的分支拉取合并到本地, 再此push

推荐阅读