git 常用命令

git clone

# 普通拉取
git clone xxx.git

# 拉到本地之后自动切到指定分支
git clone xxx.git -b branch1

git remote

# 添加一个远程版本库关联
git remote add 

# 删除某个远程版本库关联
git remote rm 

git remote add origin xxx.git #先添加到本地仓库
git push -u origin master  # 表示把当前仓库的 master 分支和远端仓库的 master 分支关联起来

git branch

git branch   # 查看本地所有分支信息
git branch -r   # 查看远程仓库所有分支
git branch -a   # 查看本地和远程仓库所有分支

git checkout

git checkout -b branch1  # 创建并切换到指定新分支

git add

git add [file1] [file2]  # 添加一个或多个文件到暂存区
git add .  # 把当前目录下得所有文件改动都添加到暂存区
git add -A #(推荐)把当前仓库内所有文件改动都添加到暂存区大多数情况,我们都应该把所有变更都加到暂存区里,如果没有,那大概率是忘了。

git commit

git commit [file1] ... -m [message] # 将暂存区的内容提交到本地 git 版本仓库中
    -m 表示的是当前提交的信息
    -a 对于已经被纳入 git 管理的文件(该文件你之前提交过 commit),那么这个命令就相当于帮你执行了上述 git add -A,你就不用再 add 一下了;对于未被 git 管理过的(也就是新增的文件),那么还是需要你先执行一下 git add -A,才能正确被 commit 到本地 git 库。
git commit -m 'feat: do something'	# 常用,设置当前提交的信息
git commit -am 'msg'    # 简便

git rm

git rm .env # 表示 .env 文件从 git 仓库中删除了,配合 .gitignore 就能保证以后所有的 .env 文件变更都不用担心被提交到远程仓库。

git rm -r dist  # 删除的是一个目录

git push

git push --set-upstream origin branch1  # 推送分支并建立关联关系

git pull

git pull origin branch1  # 拉取指定远端分支合并到本地当前分支,这里的 origin 是我们对远端仓库的命名,也可以改

如果有冲突
可以直接使用 git pull 然后指定合并当前本地分支想要建立联系的远程分支,然后本地解决一下冲突,然后提交一下改动,再执行 git push --set-upstream origin branch1 命令就大功告成了。

# 强制覆盖本地
git pull --force  <远程主机名> <远程分支名>:<本地分支名>
git pull --force origin main:main
git pull --force    # 简写

git fetch

特定时候,可能我们只是想把远端仓库对应分支的变更拉到本地而已,并不想自动合并到我的工作区(你当前正在进行代码变更的工作区),等晚些时候我写完了某部分的代码之后再考虑合并,那么你就可以先使用 git fetch。

fetch 完毕之后,我提交了自己当前工作去的变更到本地仓库,然后想合并一下远端分支的更改,这个时候执行一下 git merge origin/[当前分支名](默认一般是用 origin 表示远端的分支前缀)即可。

git merge

合并指定分支代码到当前分支。一般来说,我们用的比较多的场景可能是,远端仓库 master 分支有变更了,同时这个时候我们准备提 MR 了,那么就需要先合一下 master 的代码,有冲突就解决下冲突,那这个时候我们可以做以下操作:

切到 master 分支,git pull 拉一下最新代码
切回开发分支,执行 git merge master 合并一下 master 代码
同理,上面介绍的 git merge origin/xxx 也是一样的用法。

git reset

git reset [--soft | --mixed | --hard] [HEAD]

关于 HEAD:
    HEAD 表示当前版本
    HEAD^ 上一个版本
    HEAD^^ 上上一个版本
    HEAD^^^ 上上上一个版本
    HEAD~n 回撤 n 个版本,这种也是更加方便的

参数解析:
以下解析均基于后接参数为 HEAD^,也就是git reset HEAD^。
    --soft: 重置你最新一次提交版本,不会修改你的暂存区和工作区。
    --mixed: 默认参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
    --hard: 重置所有提交到上一个版本,并且修改你的工作区,会彻底回到上一个提交版本,在代码中看不到当前提交的代码,也就是你的工作区改动也被干掉了。


git revert

当然了,如果是针对 master 的操作,为了安全起见,一般还是建议使用 revert 命令,他也能实现和 reset 一样的效果,只不过区别来说,reset 是向后的,而 revert 是向前的,怎么理解呢?简单来说,把这个过程当做一次时光穿梭,reset 表示你犯了一个错,他会带你回到没有犯错之前,而 revert 会给你一个弥补方案,采用这个方案之后让你得到的结果和没犯错之前一样。

# 查找要回退的 commitId
git log --oneline --graph --all

# 执行回退指令
git revert commitId

# 推送代码到 git 仓库
git push

git tag

# 附注标签
git tag -a v1.0.1 -m "发布正式版 1.0.1"

# 推送标签
git push origin tagName


git tag   # 查看标签
git tag -l v1.0.1   # 筛选标签
git tag -d v1.0.1   # 删除标签
git push origin --delete v1.0.2   # 删除远程标签

# 另一种删除远程方式(表示将“:”前面空值替换到远程,也不失为一种方式)
git push origin :refs/tags/v1.0.1

git tag -l | awk '/liulei/{print }' | xargs git tag -d  # 批量删除本地tag
git show-ref --tag | awk '/rc_[0-9]{1}[0-9]{0,}$/ {print ":" $2}' | xargs git push origin  # 需要注意空格,删除远程tag


git tag -l  # 查看本地tag
git show-ref --tag    # 查看远程tag

轻量标签更像是一个临时的标签,而附注标签更加正式一点,能够保留更多的信息。

git 分支操作

在本地创建分支推送到远程

1. 建立分支
    # 首先,进入master分支:
    git checkout master
    
    # 拉取master最新项目到本地master分支:
    git pull
    
    # 创建新分支dev,并把当前master分支内容复制一份到新分支dev中:
    git checkout -b dev
    
    # 把新建分支推送到远端
    git push origin dev
    git push --set-upstream origin 新分支名称  # 与远端建立关联并推送;
    
    # 将远程分支与本地分支关联起来
    git branch --set-upstream-to=origin/dev
    
    # 验证分支是否创建成功
    git pull
    git branch -a

在远程创建分支拉取到本地

  1. 在远程的master分支下新建dev分支
    在gitee或者github上登录后自行操作
  2. 本地拉取新建的远程dev分支
git pull

# 查看(此时会发现远程dev分支,但是本地没有)
git branch -a 

# 将当前分支切换成新分支
git checkout 新分支名称

# 查看(此时会自动生成 dev 本地分支)
git branch -a