Git

Git Learning Notes (02)

Git Core Command Usage Examples

Posted by Chen Xingxu on September 3, 2020

02.Git学习笔记–Git核心命令使用实例

安装 Git 客户端

官方客户端: httpsd://git-scm.com/downloads

其它客户端:https://tortoisegit.org/download/

Git 配置

Git 安装完之后,需做最后一步配置。

打开 git bash,分别执行以下两句命令:

git config --global user.name "用户名"
git config --global user.email "邮箱"

在使用 Git 进行开发的时候,我们可以使用 SSH URL 或者 HTTP URL 来进行源码的 clone/push/pull,二者的区别是,使用 SSH URL 需要在本地配置 SSH key,这也就意味着你必须是开发者或者有一定的权限,每次的代码同步(主要是 push 和 clone)不需要进行用户名和密码的输入操作;那么 HTTP URL 就相对宽松些,但是需要在每次同步操作时输入用户名和密码,有时候为了省去每次都输入密码的重复操作,我们可以在本地新建一个文件,来存储你的用户名和密码,只需要在第一次 clone 输入用户名和密码,这些信息就被存储起来,以后就可以自动读取,不需要你再手动输入了。

Git 通过 credential helper 来实现,可以把它叫做证书助手或者凭证助手,它帮我们存储了 credential(凭证,里面包含了用户名和密码)。

参考:

https://git-scm.com/docs/gitcredentials

应用 Git 凭证助手:

git config --global credential.helper store

SSH 公钥及私钥创建

1、打开 git bash

2、执行生成公钥和私钥的命令:

#默认生成的是OPENSSH PRIVATE KEY
ssh-keygen -t rsa
#生成RSA PRIVATE KEY
ssh-keygen -m PEM -t rsa -b 4096 -C "email" -f ~/.ssh/id_rsa_work

并按回车3下。

3、执行查看公钥的命令:

cat ~/.ssh/id_rsa.pub

4、拷贝 id_rsa.pub 内容至 Git 仓库所在的 Linux 服务端的 ~/.ssh/authorized_keys 中,或者配置到代码托管服务平台中。

实例–基本使用

#创建项目
git init yangxu
#进入目录
cd yangxu
#添加文件
echo 'learn git 1' > readme.md
#查看状态
git status

readme.md 显示为红色,表示还没有添加到暂存区(local cache)中。

#将 readme.md 添加到暂存区
git add readme.md
#查看状态
git status

readme.md 显示为绿色,已经添加到暂存区(local cache)中,等待提交。

#将 readme.md 从暂存区中移除
git rm --cached readme.md
#查看状态
git status

暂存区(local cache)中没有了,但是本地的文件没有被删除。

#提交所有变化
#包含新文件(new)、被修改(modified)文件、被删除(deleted)文件
git add -A
#查看状态
git status

#将 readme.md 提交到本地仓库(local repository)
git commit readme.md -m 'first commit 1'
#查看状态
git status

#添加远程仓库
#origin 远程地址的名字
git remote add origin git@gitee.com:telyfox/test.git
#推送到远程仓库
git push origin
#推送到远程仓库
#在远程仓库创建一个新的分支 master
git push --set-upstream origin master

#从远程仓库克隆项目到本地
git clone git@gitee.com:telyfox/test.git yangxu2
#打开目录
cd yangxu2
#修改 readme.md 
echo 'learn git 2' > readme.md
#提交所有变化到 local cache
#提交 local cache 中所有文件到 local repository
#推送到远程仓库
git add -A; git commit -am 'second commit'; git push;

#同步远程仓库到本地
git pull
#查看 readme.md 内容
cat readme.md

#修改 readme.md 
echo 'learn git 3' > readme.md
#创建文件夹
mkdir -p src/main/java/demo/yangxu
cd src/main/java/demo/yangxu
#创建并写入 hello.java
echo 'package demo.yangxu' > hello.java
#提交所有变化到 local cache
git add -A
#查看状态
git status

#将指定目录及子目录移除出暂存区
git rm --cached -r src
#查看状态
git status

实例–分支管理

#查看当前分支(本地)
git branch
#查看所有分支(详细信息:本地+远程+关联信息)
git branch -avv
#修改 readme.md 
echo 'learn git 4' > readme.md
#提交所有变化到 local cache
#提交 local cache 中所有文件到 local repository
git add -A; git commit -am 'commit 4';
#查看状态
git status
#查看所有分支(详细信息:本地+远程+关联信息)
git branch -avv

#切换分支
git checkout origin/master
#查看 readme.md内容
cat readme.md
#切换分支
git checkout master
#查看 readme.md内容
cat readme.md

master 和 remotes/origin/master 内容是不一样的,两者并不等同。

#查看所有分支(本地+远程)
git branch -a
#查看所有分支(详细信息:本地+远程)
git branch -av
#查看所有分支(详细信息:本地+远程+关联信息)
git branch -avv

创建分支的四种方式

  1. 基于当前分支 创建一个新分支

  2. 基于远程分支 创建一个新分支

  3. 基于一个提交 创建一个新分支

  4. 基于 Tag 创建一个新分支

#基于当前分支创建一个新分支 dev
git branch dev
#查看当前分支(本地)
git branch
#基于 dev 分支创建一个新分支 test
git branch test dev
#查看当前分支(本地)
git branch
#基于远程分支创建一个新分支 test2
git branch test2 origin/master
#查看当前分支(本地)
git branch
#查看提交历史
git log

#基于一个提交创建一个新分支 branchForCommit
git branch branchForCommit 27c9922a7992c4ee0ee623d72bb1c909f49dacc7
#查看当前分支(本地)
git branch

#删除分支
git branch -d test test2
#切换分支到 dev
git checkout dev

实例–解决冲突

#切换分支到 master
git checkout master
#推送到远程仓库
git push
#查看所有分支(详细信息:本地+远程)
git branch -av
#此时远程和本地都是一样的

cat readme.md
echo 'git learn 5' > readme.md

git add -A
git commit -am '5 commit';

git branch -avv
#此时远程和本地不一样了

#到git仓库的网页端修改readme.md的内容
#修改为git learn 6
#提交信息为 commit 6

git status 
git branch -avv

git pull 
#此时发生了冲突


git status

vim readme.md
#如果要保留git learn 6
#就把其他内容都删除掉

git add -A; git commit -am 'commit 7 解决冲突';

git push
#冲突解决完毕

实例–远程仓库管理

#查看远程配置 
git remote [-v]

#到git仓库的网页端创建一个新的仓库test2
#要求是空仓库
#添加远程地址
git remote add origin2 git@gitee.com:telyfox/test2.git
#查看远程配置
git remote 
#默认推送到origin
git push
#首次推送到origin2
git push --set-upstream origin2 master

echo 'git learn 7' > readme.md
git add -A; git commit -am 'commit 8';
git branch -avv
#此时master关联的是origin2
git push
#默认推送到origin2

#推送到origin
git push origin

#删除远程地址
git remote remove origin2 
#查看远程配置
git remote

实例–tag管理

tag 是只读的,通常 tag 和里程碑关联在一起。

分支是可以修改的,tag 是不能修改的。

#查看当前tag
git tag
#基于当前tag创建一个新tag
git tag tag2
#基于某个分支创建tag
git tag tag3 dev
git log
#基于某个提交创建tag
git tag abc 6f9beea83ad9764a555d146adfd869317c2196a1
#删除tag
git tag -d abc

实例–日志管理

#查看当前分支下所有提交日志
git log
#单行显示日志
git log --oneline
#查看指定分支下所有提交日志
#单行显示日志
git log dev --oneline
#比较两个版本的区别
#master中还有多少内容没有同步到dev
git log dev..master
#比较两个版本的区别
#dev中还有多少内容没有同步到master
git log master..dev
#切换到dev分支
git checkout dev
#将dev合并到master
git merge master
#比较两个版本的区别
#master中还有多少内容没有同步到dev
git log dev..master

#以图表的方式显示提交合并网络
#单行显示日志
git log --graph --oneline
#查看dev最新的commit
git show dev
#通过指定commit ID查看commit
git show 0f7f0974fd