Git的基本使用——Git命令

文章目录

  • 前言
    • 参考
  • 简述
  • GIT配置
    • 设置
    • 查看 list
    • 增加 add
    • 删除 unset
  • Git项目搭建
    • 1. 创建本地仓库
    • 2. 提交代码到本地仓库
    • 3. 推送到远程仓库
    • 4.拉取到本地
    • 5.其他
  • Git文件管理
    • 文件状态
    • 查看文件状态
    • 设置忽略文件
  • 配置SSH
  • Git分支
    • 增加
    • 删除
    • 切换
    • 查看
  • 整理提交记录
    • 标签
      • HEAD
      • TAG
    • 修改记录
      • cherry-pick
      • rebase
      • merge和rebase的区别
    • 撤销变更
      • 回退记录 reset
      • 抵消修改 revert

前言

本文是基于以下参考中的内容,结合个人使用体验进行创作的。
本文旨在讲解常用的git命令,在实际的开发过程中,大多会下载相关软件或插件辅助使用,图形化的界面可以大大降低学习难度,便捷的操作也能很好的提升开发体验,在Git的基本使用——Android Studio中的Git插件一文中有写git插件的常见使用方法。

参考

Git 大全——非常详细的列出了git命令及其含义

Learn Git Branching ——模拟学习git分支

狂神说-B站视频——比较基础但很详细易懂的git视频

简述

Git是分布式版本控制系统

Git Bash: Unix与Linux风格的命令行
Git CMD: Windows风格的命令行
GIT GUI: 图形操作界面

GIT配置

设置

必须配置用户名和用户邮箱才能使用

git config --global user.name "zhang3"
git config --global user.email "[email protected]"

更改用户名

git config --global user.name "Li4"

查看 list

# 全部
git config -l
#系统
git config --system --list
#本地:
git config --global --list

增加 add

git config --global --add user.name "li4"
git config --global --add user.email "[email protected]"

删除 unset

git config --global --unset user.name "zhang3"
git config --global --unset user.email "[email protected]"

Git项目搭建

进入需要推送项目的根目录,进行如下操作。
Git的基本使用——Git命令_第1张图片

1. 创建本地仓库

  • 方法一:新建本地仓库
# 初始化一个本地仓库
git init
# 将该仓库与远端仓库建立连接
git remote add [远端仓库名] [项目对应的url]

远端仓库默认名称origin,但也可以给他们起别的名称

  • 方法二:克隆远程仓库
git clone [项目对应的url]

两个本体仓库也可以互相 clone,
但 push 的时候需要把远端本地仓库的HEAD detach掉,
或者将远端仓库的receive.denyCurrentBranch设置为ignore或warn

2. 提交代码到本地仓库

# 将当前目录下所有文件添加到缓存区
git add . 
# 将缓存区中的文件提交到本地仓库
git commit -m "本次提交的备注"

提交备注:一般为本次修改内容

3. 推送到远程仓库

# 将当前branch推送到远程仓库同名分支,
git push
# 将当前branch推送到远程指定仓库指定分支,没有同名则自动新建
git push <远程仓库> <远程分支名>

如果再自己提交修改之前,有别的同事往该分支上提交过代码,可能会出现本地修改和远程仓库有冲突的情况,此时会push失败,需要先pull远程更改,在本地merge之后再push。

4.拉取到本地

# 默认从远程拉取到本地同名分支下,没有同名则自动新建
git pull
# 从远程指定分支,拉取到本地指定分支,没有同名则自动新建
git pull <远程仓库> <远程分支名>:<本地分支名>

pull命令实际上包含了两步,等价于下面两行

# 从远程拉取
git fetch
# 将拉取到的修改与本地代码合并
git merge <远程仓库>/<远程分支名>

5.其他

查看提交记录

 git log

Git文件管理

文件状态

# 查看当前branch的文件状态
git status

Git的基本使用——Git命令_第2张图片

方框——文件状态
线条——状态变更条件
Git的基本使用——Git命令_第3张图片

查看文件状态

# 所有文件
git status
# 指定文件
git status filename

设置忽略文件

某些文件不必纳入版本控制之中,例如:
数据库文件、临时文件、设计文件…

在主目录下建立
Git的基本使用——Git命令_第4张图片

配置SSH

设置本机绑定SSH公钥,实现免密登录

ssh-keygen -t rsa	#生成公钥和私钥,其中rsa为加密算法,可以根据自己的需要选择其他的加密算法

接下来会提示输入密码,直接回车就好,三次回车后即可完成。

此时在“C:\用户\当前用户名.ssh”文件夹中会生成两个文件,其中.pub后缀(取public之意)的就是公钥,另一个是私钥。

Git分支

master分支应该用来发布稳定的版本。

增加

# 新建一个分支
git branch branch_name
# 新建并切换到新分支
git checkout -b branch_name

删除

# 删除分支
git branch -d branch_name
# 删除远程分支
git push origin -delete branch_name
git branch -dr branch_name

切换

# 切换分支
git checkout branch_name

查看

# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r

整理提交记录

标签

HEAD

HEAD是一个标签,表示你正在所指向的该记录上工作。
HEAD一般指向当前分支的分支名,而当前分支点分支名一般指向当前分支上最近的一次提交记录。
修改提交树的过程中,常常要用到改变HEAD指向。

TAG

TAG也是一种标签,但设置后不可以更改指向,也不可以被HEAD指向。
用于设置持久标记,例如版本号。

修改记录

cherry-pick

将指定的commit移动到当前HEAD处

# 移动指定的一个commit
git cherry-pick <commit_id>
# 移动指定的N个commit
git cherry-pick <commit1_id> <commit2_id> ...

rebase

rebase,变基。基,是指当前操作的基础。
-i 表示interaction,是交互的意思

git rebase -i HEAD`3
git rebase -i <commit_id>

上述命令执行后,会打开vim编辑器,你可以自行调整提交记录顺序,或是执行合并、丢弃等操作。
编辑完成后保存退出,git会自行根据你的修改执行命令如果导致了冲突,
1.合并冲突
1).手动修改,2).使用add将修改内容添加到暂存区,3).使用git rebase --cotinue。
2.放弃变基
git rebase --abort ,放弃这次操作,回到之前的状态
3.跳过冲突
git rebase --skip ,跳过引起冲突的commits,跳过的记录会被丢弃掉,慎用。

merge和rebase的区别

初始状况
假设有两个分支,分别为稳定的master分支和修改了部分代码的bugFix分支
现在我们在master分支上,需要将bugFix分支合并进来
Git的基本使用——Git命令_第5张图片

merge
将bugFix上的提交记录合并到当前分支上

git merge bugFix

Git的基本使用——Git命令_第6张图片

rebase
c3原本是基于c1进行修改的,现在将其改为基于bugFix指向的c2进行修改。
于是将当前记录移动到bugFix下,此处的效果和cherry-pick效果相同

git rebase bugFix

Git的基本使用——Git命令_第7张图片

撤销变更

回退记录 reset

思路:回退n个提交的记录

# 回退2个提交记录
git reset HEAD~2
# 回退到指定的提交记录,中间的文件差异会加入working tree
git reset <commit_id>
# 强制回退到指定的提交记录,并重置working tree,而中间的文件差异会消失
git reset --hard <commit_id>

reset和checkout都是移动HEAD,将其指向指定的记录,不同的是,reset会带着branch一起移动。

抵消修改 revert

思路:增加一个刚好可以抵消上次修改记录的记录

git revert master

例如再远程主分支上有内容需要删除,
如果强行删除的话会导致删除部分记录丢失,
这样后期发现有问题需要排查时没有记录就很麻烦,
这种情况下,revert就是一个绝佳选项。

你可能感兴趣的:(其他,git,github)