说明

这里是个人工作时常用的一些git命令,现在越来越多了,小本本都快记不下了,这里稍微做一下整理。

工具下载

首先是git的下载地址:

由于官网的下载速度很慢,推荐使用taobao镜像的下载地址。

设置用户名和邮箱

全局配置

1
2
$ git config --global user.name [name]
$ git config --global user.email [email]

配置当前仓库

1
2
$ git config user.name [name]
$ git config user.email [email]

查看用户名和邮箱

1
2
$ git config user.name
$ git config user.email

生成SSH密钥

1
$ ssh-keygen -t rsa -C "[email]"

执行完毕和用户目录下就会生成一个**.ssh**文件夹。

拉取远程代码库

可以直接clone远程代码仓库(推荐)

1
$ git clone https://github.com/libgit2/libgit2 mylibgit

先初始化仓库,再拉取代码

1
2
3
4
5
$ cd ./mylibgit
$ git init
$ git remote add origin git@github.com:libgit2/libgit2.git
$ git pull origin master
$ git push -u origin master

提交代码变更

查看工作区变更

1
$ git status

添加文件到暂存区

1
$ git add README.md

添加所有变更文件到暂存区

1
$ git add .

提交到本地仓库

1
$ git commit -m 'Update README'

推送到远程代码仓库(main是分支)

1
$ git push origin main

版本切换

查看版本/提交记录

1
$ git log

查看版本/提交简介

1
$ git log --pertty=oneline

撤销提交,保留代码变更

撤销上次提交

1
$ git reset --soft HEAD^

撤销前n次提交

1
$ git reset --soft HEAD~n

回退到某次提交记录

1
$ git reset --soft commit-id

版本回退,不保留代码变更

回退到当前最新提交

1
$ git reset --hard HEAD

回退到上一版本

1
$ git reset --hard HEAD^

回退到之前的第n个版本

1
$ git reset --hard HEAD~n

回退到某个版本/重新切换回未来版本

1
$ git reset --hard commit-id

强制推送:在已经推送到远程的记录又被修改的情况下

1
$ git push origin main --force
1
$ git push -f origin main

分支管理

查看当前仓库分支

1
$ git branch

查看当前仓库以及远程仓库所有分支

1
$ git branch -a

在当前分支的基础上创建新分支

1
$ git checkout -b 分支名

删除已合并的本地分支

1
$ git branch -d 分支名

删除未合并的本地分支

1
$ git branch -D 分支名

删除远程仓库分支

1
$ git push origin -d 分支名

1
$ git push origin :分支名

删除远程已经删除的分支

1
$ git remote prune origin

标签-tag

tag和分支操作类似

查看tag

1
$ git tag

给当前版本添加tag

1
$ git tag 标签名

给某一版本添加tag

1
$ git tag 标签名 commit-id

删除标签

1
$ git tag -d 标签名

删除远程标签

1
$ git push origin -d 标签名

推送标签到远程仓库

1
$ git push origin 标签名

子模块(submodule)

当前仓库添加子模块

1
$ git submodule add <url> <path>

拉取仓库后拉取子模块

1
2
$ git submodule init
$ git submodule update
1
$ git submodule update --init

1
$ git clone --recurse-submodules

更新子模块

1
$ git submodule update --remote <submodule>

删除子模块

1
2
$ git submodule deinit <submodule>
$ git rm --cached <submodule>

保持fork之后的仓库和上游同步

遇到一些好的代码仓库,有时候会fork一份到自己的账号,但一旦原来的代码仓库有了新的提交,如何保持自己的仓库和源仓库代码同步呢?

一种方式是通过远程仓库向fork之后的仓库提交一个PR,但这样会导致提交记录不一致,非常EP,在网上搜罗了好久,终于找到一个完美的方法。

首先需要将fork之后的仓库clone到本地。

然后设置本地仓库的上游仓库地址为源仓库

1
$ git remote add upstream git@github.com:kira-96/myblog.git

同步上游仓库变更

1
2
3
$ git fetch upstream
$ git checkout main
$ git merge upstream/main

推送到远程仓库

1
$ git push origin main

参考