Git使用笔记

软件安装后首次配置

配置用户名和邮箱

	git config --global [user.name] ‘自己的名字’
	git config --global [user.name] ‘自己的邮箱’
	git config --global alias.ci "commit -s"  命令别名
  • local 只对当前仓库有效
  • global 所有仓库有效
  • system 对系统所有用户有效

查看配置

git config --list --local
git config --list --global
git config --list --system

清除配置

git config --unset --local [user.name] 
git config --unset --global [user.name] 
git config --unset --system [user.name] 

很好用的一段命令

  • 基本命令
	git init  初始化。例如:git init demo 或 cd demo 
	git add .   添加文件至暂存区
	git commit -m "describe"  提交文件
	git status [-s] 状态  -s 简版状态
	git stash			保存当前的工作现场
	git stash list			查看所有被保存的工作
	git stash pop			恢复并删除工作现场,等价于git stash apply + git stash drop

	git diff 工作区和提交任务(提交暂存区,stage)中相比较
	git diff HEAD 工作去和HEAD(当前分支)作比较
	git diff --catched/staged 提交暂存区(提交任务,stage)和版本库比较
	git mv 原文件名   新文件名      修改文件名字
	git log    	功能为查看日志
	git log --pretty=oneline     查看日志,以单行显示
	git reflog    功能为查看历史操作记录,比如回退版本后想要重返“未来”可以查看最新的提交版本
	gitk   	通过可视化工具查看提交信息
	git reset --hard head		退回到上一个版本
	git reset --hard 版本号			当知道对应的版本号时,可以用这个命令,适用于回退和前往之前的新版本
	git restore 文件名		新版本git提示用该命令进行撤销
	git checkout – 文件名		旧版本用此命令做撤销,新版本也可以用
	git restore --staged 文件名		如果已经add进暂存区
	git rm -f 文件名 		删除文件
	git branch		查看当前分支
	git checkout -b dev		-b表示创建并切换,相当于下面两条命令
	git branch dev		创建分支
	git checkout dev		切换分支
	git switch -c dev		创建并切换到dev
	git switch dev		直接切换到已有的dev分支
	git merge dev		将dev分支合并到当前分支,合并后会丢失原来分支的信息
	git branch -d dev			删除分支
	git branh -D dev			删除分支,如果dev没有被合并过用大写 -D
	git log --graph --pretty=oneline --abbrev-commit			查看分支合并情况
	git cherry-pick bug		分支的提交版本号
	git clone 自己的git项目地址		远程克隆到本地
	git remote add origin 自己的git项目地址
	git pull		拉取远程的更新
	git push -u origin master		第一次推送是要加上-u,可以把本地的master和远程的master关联起来,方便以后的推送或者拉取
	git push origin master			之后推送可以直接用该命令
	git remote    		查看远程仓库信息
	git remote -v		此命令可显示更详细信息
	git grep  搜索文本
	git rev-parse --git-dir  显示版本库.git目录所在位置
	git rev-parse --show-otplevel  显示工作去目录
	git rev-parse --show-prefix  显示相对于工作区的相对目录
	git commit --allow-empty -m "describe"  允许无用户提交
	git reset HEAD 暂存区的目录会被重写,会被当前分支替换,但是对工作区没有影响。
	git rm --cached <file> 直接从暂存区删除文件,工作区没有影响

	git tag			查看所有标签
	git tag 标签名			把当前分支的最新提交打上标签,标签名字自己起
	git tag 标签名 对应commit版本号			把某个版本号的提交打上标签
	git tag -a v0.1 -m “描述信息” 版本号			可以用这种方式给标签增加说明,-a对应标签名,-m对应描述信息
	git show 标签名			查看标签具体信息
	git tag -d 标签名			删除标签
	git push origin 标签名			推送某个标签到远程
	git push origin --tags			推送所有标签到远程
	删除远程标签:
	git tag -d 标签名			先删除本地标签
	git push origin: refs/tags/标签名			然后从远程删除

git cherry-pick

开发环境在dev分支下,bug修复是提交在master中,如何快速合并至dev下:转移至dev分支下,执行下面命令
git cherry-pick bug分支的提交版本号 git 教程 --git cherry-pick 命令

本地仓库与远程仓库关联

如果本地先建好了项目,那么执行这个命令将本地仓库与远程仓库关联
git remote add origin 自己的git项目地址

本地创建git 仓库,绑定推送远程

mkdir YoungSmith
cd YoungSmith
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin git@gitee.com:YoungSmith/YoungSmith.git
git push -u origin master

已有本地项目,绑定推送远程

cd existing_git_repo
git remote add origin git@gitee.com:YoungSmith/YoungSmith.git
git push -u origin master

数据源

  • 查看数据源
git  remote -v
  • 切换git源
git remote set-url origin http://young***web.git

创建本地分支

  • 在指定分支基础,创建分支
git checkout -b function_20210824 origin/function_20210824
  • 在当前分支基础上创建分支
git checkout -b function_20210824   

git ssh 与 https 互换

SSH 转 HTTPS

我的情况是原本使用ssh,但是ssh突然使用不了,需要跟换https
步骤:

  • 修改远程仓库地址
    • 方法有三种:
      - 修改命令: git remote set-url origin [url]
      - 先删后加: git remote rm origin git remote add origin [url]
      - 直接修改config文件
  • 以上进行git操作的时候,每次都需要密码,所以可以配置免密
    • 新建文件并保存密码: touch ~/.git-credentials vim ~/.git-credentials
    • 添加内容:https://{username}:{passwd}@github.com
    • 添加git配置:git config --global credential.helper store

HTTPS 转 SSH

  • 如果想切回ssh,直接修改远程仓库的地址即可:git remote set-url origin [ssh的url

免密登录

ssh-keygen -t rsa -C “邮箱”

结构图


  • 图一
    这里写图片描述
  • 图二
    这里写图片描述

神奇的rebase

引自:【git 整理提交】git rebase -i 命令详解

  • git rebase -i 详解:官方文档

  • 变基时可用的命令:

    • pick
      pick只是意味着包括提交。重新进行命令时,重新安排pick命令的顺序会更改提交的顺序。如果选择不包括提交,则应删除整行。
    • reword
      该reword命令与相似pick,但是使用后,重新设置过程将暂停并为您提供更改提交消息的机会。提交所做的任何更改均不受影响。
    • edit
      如果您选择edit提交,则将有机会修改提交,这意味着您可以完全添加或更改提交。您还可以进行更多提交,然后再继续进行变基。这使您可以将大型提交拆分为较小的提交,或者删除在提交中所做的错误更改。
    • squash
      该命令使您可以将两个或多个提交合并为一个提交。提交被压缩到其上方的提交中。Git使您有机会编写描述这两个更改的新提交消息。
    • fixup
      这类似于squash,但是要合并的提交已丢弃其消息。提交仅合并到其上方的提交中,并且较早提交的消息用于描述这两个更改。
    • exec
      这使您可以对提交运行任意的Shell命令。

案例演示

  • git init

  • 制造一些提交

    touch base.txt
    git add .
    git commit -m “add base”
    touch 1.txt
    git add .
    git commit -m “add 1”
    touch 2.txt
    git add .
    git commit -m “add 2”
    touch 3.txt
    git add .
    git commit -m “add 3”
    touch 4.txt
    git add .
    git commit -m “add 4”
    touch 5.txt
    git add .
    git commit -m “add 5”

  • 查看现在的提交

    git log
    commit a75ed742838ebc1ef1073502623478f73e1ec21f
    Author:
    Date: Wed Mar 4 10:02:51 2020 +0800
    add 5
    commit 8b485bb4768b2abf8f6400dcba069f1a650ed5ec
    Author:
    Date: Wed Mar 4 09:59:27 2020 +0800
    add 4
    commit 63ce9fb010da550c668aca66758c45fbfad46e2b
    Author:
    Date: Wed Mar 4 09:59:04 2020 +0800
    add 3
    commit 9cd34c4d42f52cfb40026dae613c8ad29d7cbc66
    Author:
    Date: Wed Mar 4 09:58:45 2020 +0800
    add 2
    commit 77bd0eb1a97e1676367ea236c1c47c155eaa8430
    Author:
    Date: Wed Mar 4 09:58:23 2020 +0800
    add 1

  • pick 更改提交顺序、删除提交
    pick只是意味着包括提交。重新进行命令时,重新安排pick命令的顺序会更改提交的顺序。如果选择不包括提交,则应删除整行。

改变提交的顺序

假定,我们现在要改变提交 5.txt 和 4.txt 的顺序,该怎么操作
更改涉及到了两次提交,最早提交次数为2(4.txt是倒数第二次提交)
告诉git 我要改变倒数第2次后的提交
> git rebase -i HEAD~2

  • 接着,git给你一个文本,告诉你我知道了,你说的这些可以有以下操作
    下面是执行命令后的样子

pick 8b485bb add 4
pick a75ed74 add 5
Rebase 63ce9fb…a75ed74 onto 63ce9fb (2 command(s))
Commands:
p, pick = use commit
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like “squash”, but discard this commit’s log message
x, exec = run command (the rest of the line) using shell
d, drop = remove commit
These lines can be re-ordered; they are executed from top to bottom.
If you remove a line here THAT COMMIT WILL BE LOST.
However, if you remove everything, the rebase will be aborted.
Note that empty commits are commented out

意思是:我们刚刚执行的命令中 HEAD~2代表选择离HEAD最近的两条提交
下面注释的是提示,我们不需要管,只要专注前两行就ok
把 第一行 和 第二行 交换顺序
小技巧:这个是vi编辑器,首先Esc ,进入命令模式,移动到第一行 按dd,本行就被剪切,pick a75ed74 add 5就变成了第一行,接着按 p刚刚剪切的就成了第二行,快速交换顺序
变成下面的样子

pick a75ed74 add 5
pick 8b485bb add 4

接着 Esc,:wq 保存退出

  • git log查看,4 和 5 的顺序改变了

删除某一个提交

假定,我们现在要删除 某一个提交,该怎么操作
我们来删除 add 4 的那条提交
git rebase -i HEAD~2
出现如下

pick a75ed74 add 5
pick 8b485bb add 4
Rebase 575fd8b…bb2a77d onto 575fd8b (1 command(s))
…略

我们删除 第二行,接着 Esc,:wq 保存退出
git log查看,4 和 5 的顺序改变了
record 修改提交消息(提交内容不变)
该reword命令与相似pick,但是使用后,重新设置过程将暂停并为您提供更改提交消息的机会。提交所做的任何更改均不受影响。

修改提交的消息(提交内容不变)

假定,我们现在要 修改某个提交的消息,该怎么操作
修改一下 add 2 的提交消息
git log 查看 add 2 距离 HEAD 有多少的距离,得:3

git rebase -i HEAD~3
pick 9cd34c4 add 2
pick 63ce9fb add 3
pick 575fd8b add 5
Rebase 77bd0eb…575fd8b onto 77bd0eb (3 command(s))
… 略

我们只需要修改 第一行 add 2 ,其余保持不变

r 9cd34c4 add 2
pick 63ce9fb add 3
pick 575fd8b add 5
Rebase 77bd0eb…575fd8b onto 77bd0eb (3 command(s))
… 略

r 是 record简写,接着 Esc,:wq 保存退出,
git会说 开始执行,接着弹出一个编辑窗口

add 2
Please enter the commit message for your changes. Lines starting
with ‘#’ will be ignored, and an empty message aborts the commit.
Date: Wed Mar 4 09:58:45 2020 +0800
interactive rebase in progress; onto 77bd0eb
Last command done (1 command done):
r 9cd34c4 add 2
Next commands to do (2 remaining commands):
pick 63ce9fb add 3
pick 575fd8b add 5
You are currently editing a commit while rebasing branch ‘master’ on ‘77bd0eb’.
Changes to be committed:
new file: 2.txt

我们就可以修改 add 2 了
下面的注释是对当前状态的一些说明
大致是说,上一次执行的命令 是 r 9cd34c4 add 2
下面还有两条命令
当前命令改变的committed的文件 是 2.txt 等等
修改 add 2
add 2 ~ new comment
1
接着 Esc,:wq 保存退出,成功
git log查看, 消息 “add 2” 变为了 “add 2 ~ new comment”
只要不动pick的 顺序,就代表什么都不做

修改提交内容

edit修改提交
如果您选择edit提交,则将有机会修改提交,这意味着您可以完全添加或更改提交。您还可以进行更多提交,然后再继续进行变基。这使您可以将大型提交拆分为较小的提交,或者删除在提交中所做的错误更改。

假定 我想要在两个提交之间 再加提交,怎么办
假定,我们要在 add 3 和 add 5 之间 添加一条提交

git rebase -i HEAD~2
pick 6934312 add 3
pick 5ce6dde add 5
Rebase 7f9d45d…5ce6dde onto 7f9d45d (2 command(s))

修改为

e 6934312 add 3
pick 5ce6dde add 5
接着 Esc,:wq 保存退出,有如下
$ git rebase -i HEAD~2
Stopped at 6934312135c150bf74bead26e371df1443273ca4… add 3
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
xxxxx MINGW32 ~/Desktop/git-demo (master|REBASE-i 1/2)

可以看到,我们的master分支多了REBASE-i 1/2
我们尝试做一些修改,给3.txt 增加一些内容,然后提交

git add 3.txt
git commit -m “edit 3.txt”
[detached HEAD 7262a57] edit 3.txt
1 file changed, 1 insertion(+)

接着,我们继续 rebase

git rebase --continue
Successfully rebased and updated refs/heads/master.

git log 查看,在 add 5 和 add 3 中间 增加了我们刚刚的修改

单纯修改这次提交内容和消息

假定 我想要单纯的修改这次提交内容和消息,怎么办
参照上面的做到这一步,我们选择提交的方式 加一个参数 git commit --amend修改

git add 3.txt
git commit --amend
这样 就不会在多出一次提交
本次对 3.txt的修改会记录 到 add 3 这次提交记录中

接着结束这次 rebase

git rebase --continue
Successfully rebased and updated refs/heads/master.

squash合并提交

squash:该命令使您可以将两个或多个提交合并为一个提交。提交被压缩到其上方的提交中。Git使您有机会编写描述这两个更改的新提交消息。
假定,我想合并某几个提交,怎么办
如下,
在这里插入图片描述
我们合并 add 5 和 add 3

git rebase - i HEAD~2

pick 6934312 add 3
pick 6fa47e4 add 5
Rebase 7f9d45d…6fa47e4 onto 7f9d45d (2 command(s))

修改为

pick 6934312 add 3
s 6fa47e4 add 5

接着 Esc,:wq 保存退出,开始执行变更,然后 在弹出来的编辑框里 写提交信息

This is a combination of 2 commits.
The first commit’s message is:
add 3
This is the 2nd commit message:
add 5
Please enter the commit message for your changes. Lines starting
with ‘#’ will be ignored, and an empty message aborts the commit.
Date: Wed Mar 4 09:59:04 2020 +0800
interactive rebase in progress; onto 7f9d45d
Last commands done (2 commands done):
pick 6934312 add 3
s 6fa47e4 add 5
No commands remaining.
You are currently editing a commit while rebasing branch ‘master’ on ‘7f9d45d’.
Changes to be committed:
new file: 3.txt
new file: 5.txt

我们可以修改提交消息,默认是把两个消息都合并,接着 Esc,:wq 保存退,git log查看,合并成功

fixup合并提交,只保留较早的提交信息

这类似于squash,但是要合并的提交已丢弃其消息。提交仅合并到其上方的提交中,并且较早提交的消息用于描述这两个更改。
最后两次提交

git rebase -i HEAD~2

pick 7f9d45d add 2 ~ new comment
pick 311adc9 add 3
# Rebase 77bd0eb..311adc9 onto 77bd0eb (2 command(s))
#  ----------------------
# 变更为
# -----------------------
pick 7f9d45d add 2 ~ new comment
f 311adc9 add 3
# 保存

exec 执行任意shell命令

git rebase -i HEAD~3
# 弹出编辑框
#----------------------------
pick 81fe4d0 添加test2.txt和test3.txt
pick 77bd0eb add 1
pick e7c68b8 add 2 ~ new comment
# Rebase 258a059..e7c68b8 onto 258a059 (3 command(s))
#....
# ----------------
# 加一行 命令
# ---------------
x echo "Hello is echo do ......."
pick 81fe4d0 添加test2.txt和test3.txt
pick 77bd0eb add 1
pick e7c68b8 add 2 ~ new comment
## 执行了我们刚刚键入的命令
Executing: echo "Hello is echo do ......."
Hello is echo do .......
Successfully rebased and updated refs/heads/master.

其他

Commands:
p, pick = use commit
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like “squash”, but discard this commit’s log message
x, exec = run command (the rest of the line) using shell
d, drop = remove commit

删除提交 - drop

用法与 p,r,e,s,f,x 一致
You can fix this with ‘git rebase --edit-todo’.
用 git rebase --edit–todo 来重新编辑命令

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值