git学习笔记

贴两张阮一峰大神的图

两张都是描述Git工作流程的图
Git流程)

Git流程2

git init & clone

init命令是在一个空目录中新建一个Git仓库
clone命令是将一个项目的Git仓库下载到本地
init --bare一般用于远程仓库的初始化,其功能是只创建GIt数据目录, see: 最简单的Git服务器

git config

config --list查看所有配置
config -e [--global]编辑配置文件

# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

git add && rm && mv

add是将某个文件/文件夹或多个文件/文件夹添加到暂存区
add -p确认文件的每一个修改, 可以实现同一个文件造成多次commit
rm 删除工作区中的文件/文件夹, 并将删除的这个操作放入暂存区·
mv 改名工作区的某个文件, 并把这个操作放入暂存区

git commit

提交一次代码
-m用来标记提交的解释
-a省去了add的操作, 直接提交自上次commit到现在工作区的改变的内容
-v显示diff信息
--amend使用一次新的commit来替代上次commit, 一般用于代码的小修小改, 或者-m信息不小心写错了

git branch

功能有列出所有分支, 新建分支,删除分支, 为分支指定远程分支等
直接执行该命令,会打印出当前仓库下的所有本地分支
-r打印出所有远程分支
-a打印出包括本地分支和远程分支
[branch_name]新建分支,但不切换到新的分支
[branch_name] [commit]新建分支, 并指定到某一次提交,这里的[commit]可以是Hash值,也可以是HEAD ~ ^ 相对引用
--track [branch][remote_branch]新建分支, 并指定与远程分支的追踪关系
-d [branch]删除分支
-dr [remote_branch]删除远程分支

git checkout

功能有很多
checkout [branch_name]签出到某一分支或者某一节点
-b 新建分支并签出到该分支

git checkout -b bugFix
# 相当于
git branch bugFix
git checkout bugFix
# 还可以新建分支并指定该分支的远程分支
git checkout -b bugFix origin/bugFix
# 若要绑定的远程分支存在则直接绑定, 若不存在, 则新建

git checkout -b [branch_name] [tag]
# 创建新的分支在并指向tag所在的节点

--orphan新建一个没有任何commit的空分支, 适合在需要一个全新的功能时候使用
checkout [file]回退暂存区的某个文件到工作区
checkout .回退暂存区的所有文件到工作区
--丢弃工作区中某个文件的修改, 如果已经add到暂存区, 可以使用git resrt HEAD .命令

git merge

合并分支并在当前分支创建新的commit
git merge bugFix # 合并 bugFix分支
·git merge fixes main· # 合并fixes和main两个分支
-m 与commit的一样

git rebase

变基, 按照我的理解就是, 合并分支进目标分支, 不会造成分支的分叉, 提交链上始终只有一条线, 而不是提交树
git rebase main bugFix
上面的命令是将bugFix分支rebase到main分支, 使得bugFix分支回归到main分支的提交链.
如果当前HEAD在bugFix上,则可以省略后面bugFix参数
-i [commit]重新排序之前的提交,可以隐藏掉一些commit
--cuntinue 代码冲突时,rebase会暂停, 解决完冲突之后使用add添加暂存之后使用--cuntinue会继续

git cherry-pick

合并某一个提交节点并在当前分支上生成对应的commit, 也可以指定A...B, 代表A-B中间一连串的提交, 也可以组合^ ~这种相对定位符号使用
git cherry-pick A # 代表只将A这一次提交合并到我们的当前分支, 并且会和当前的分支合并后生成一个新的commit

git fetch

下载远程服务器上的变动, 但是不会改变本地仓库的任何文件, 也不会改变分支和HEAD指针
[remote]下载变动

git remote

-v显示所有的远程仓库
add [name] [url]新增新的远程仓库

git pull

git pull [remote_name] [remote_branch:local_branch]
# 其实pull指令就是fetch和merge指令的结合, 比如
git pull origin main
# 就相当于
git fetch origin main
git merge origin/main

# 可以添加--rebase参数改为rebase代替默认的merge操作
git pull --rebase origin main 

git tag

git tag列出所有的tag
git tag [tag_name]创建新的tag在当前commit
git tag [tag_name] [commit]创建新的tag在指定commit
git tag -d [tag_name]删除某个本地tag

git push

git push [remote] [tag]提交指定tag
git push [remote] --tags提交所有的tag
git push [remote] --delete [branch_name]删除远程分支
git push [remote] [branch_name]上传本地指定分支到远程
--force强制推送
--all推送所有分支

git reset

功能很多, 几乎可以撤销一切操作

# 回滚一次/多次提交操作
git reset HEAD~3  
git reset HEAD^
git reset [hash]
# 还有子参数
        --soft: 回退到某个版本,只回退了commit的信息,
                        不会恢复到index file一级。如果还要提交,直接commit即可;
        --hard: 彻底回退到某个版本,本地的源码也会变为上一个版本的内容,
                        撤销的commit中所包含的更改被冲掉
      --keep: 只回退HEAD指针保留工作状态

# 回滚 `add` 操作,, 注意和 `checkout` 丢弃的区别
# 将修改后, 已经add到暂存区, 但还未commit的文件,
# 可以用reset命令将这些文件回退到工作区
git reset
# 子命令
    [--] [<pathspec>...]    # 回退单个文件或者多个文件

git revert

回退到某个版本
和reset很像, 但是revert是新建一个commit, 将代码内容重新到要回到的版本, 然后提交到新的一个commit
revert前:
revert之前
执行 git revert HEAD 之后, C2'的代码内容和C1完全相同,但是C2‘是一次完整的全新的commit
revert之后

git status

查看当前工作区状态

git log

查看当前仓库版本历史
--stat显示commit历史,并显示每次commit变更的文件
-S搜索提交历史
--follow显示某个文件的历史
-p显示某个文件相关的每一次diff
-N显示最后的N次提交
--oneline一行展示

git sortlog

log的排序输出
-c按照提交者排序
-n根据每个作者的提交数量对输出进行排序
-s只显示提交次数, 不显示提交描述
-e显示电子邮件
-w换行输出

git reflog

显示最近的几次提交, 和 git log -N有点类似

git diff

主要用于查看代码之间的差异
直接执行显示暂存区和工作区的diff差异
diff --cached [name]显示暂存区和上个commit的差异
diff [commit]显示当前工作区与指定commit的差异, 指定commit可以是tag HEAD 以及分支名
diff [first-branch]...[second-branch]显示两个commit之间的差异
git diff --shortstat "@{0 day ago}"显示你今天写了多少代码 23333

git show

show [tag]查看tag信息
show [commit查看某次提交的内容信息
show --name-only [commit]只显示某次提交有改变的文件
show [commit]:[file]查看某次提交的某个文件的内容

获取中...

添加新评论