git常用命令

Posted leocll

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git常用命令相关的知识,希望对你有一定的参考价值。

关于git

常用命令

注意:以下操作都是针对当前分支的操作

# 克隆远程仓库
git clone <repo>
# 使当前文件夹变成一个git仓库
git init
# 查看修改
git status
# 查看修改对比
git diff <file>
git diff

# 查看分支,不加`-a`只查看本地分支,加了`-a`查看所有分支
git branch <-a>
# 切换分支
git checkout <branch>

# 撤销工作区的修改
git checkout <file>
git checkout .
# 将工作区的修改加入暂存区
git add <file>
git add .
# 取消暂存
git reset HEAD <file>
git reset HEAD .

# 提交暂存区的修改至版本库
git commit -m "<这是备注信息>"
# 发送已提交的修改至远程仓库
git push
# 拉取
git pull

# 查看日志
git log
# 回滚至某次提交(revert、reset具体看后面)
git revert <commit>
git reset --hard <commit>

clone

# 克隆某远端仓库,dir为本地的文件夹(默认为仓库名)
git clone <repo> [<dir>]
# 克隆某仓库的某分支
git clone -b <branch> <repo> [<dir>]
# 子库递归循环克隆
git clone --recursive <repo> [<dir>]

branch

# 切换到某个分支/tag
git checkout <branch|tag>
# 保存当前分支的修改
git stash
# 创建分支
git checkout -b <branch>
# 删除本地分支
git branch -d <branch>
# 合并分支到当前分支
git merge <branch>

# 删除远程分支
git push origin --delete <remote branch>
# push,远端已有此分支,但未和本地分支关联
git push -u origin/<remote branch>
git push -u origin <remote branch>
# push,远程没有此分支
git push origin <branch>:<remote branch>

tag

# 查看所有标签
git tag
# 查看符合检索条件的标签
git tag -l 1.*.*
# 切换到某个标签
git checkout <tag>

# 创建轻量标签
git tag 1.0.0-light
# 创建带备注标签(推荐)
git tag -a <tag> -m "这是备注信息"
# 针对特定commit版本SHA创建标签
git tag -a <tag> <commit> -m "这是备注信息"

# 删除本地标签
git tag -d <tag>
# 删除远程仓库标签
git push origin --delete <tag>

# 发送所有本地标签至远程仓库
git push origin --tags
# 发送某本地标签至远程仓库
git push origin <tag>

submodule

注意:使用了submodule会在.git文件夹的同级生成一个.gitmodules的文件

# 递归的方式克隆整个项目
git clone <repo> --recursive 
# 添加子模块
git submodule add <dir path> <submodule path> 
# 初始化子模块
git submodule init 
# 更新子模块
git submodule update [--init] [--recursive]
# 拉取所有子模块
git submodule foreach git pull 拉取所有子模块
  • 示例
# 克隆RepoA
git clone xxx.git RepoA
# 进去RepoA文件夹
cd RepoA
# 添加ModuleA子模块
git submodule add ModuleA xxx.git
# 在libs文件夹下添加libA子模块
git submodule add libs/libA xxx.git

# 此时RepoA文件夹下会生成一个.gitmodules的文件,用于保存子模块信息
cat .gitmodules

[submodule "ModuleA"]
    path = ModuleA
    url = xxx.git
[submodule "libs/libA"]
    path = libs/libA
    url = xxx.git

remote

注意GitHubfork使用,其实就是upstream的使用

# 查看远程仓库信息
git remote -v
# 添加origin/上游仓库
git remote add origin|upstream <repo>
# 移除origin/上游仓库
git remote remove origin|upstream
# 抓取上游仓库的修改
git fetch upstream
# 合并上游仓库分支到本地分支
git merge upstream/<branch>

reset

reset:指将版本库中指针指到指定commit,且之前的commit会从git log中删除,但在git reflog中能看到

git reset <--hard|soft|mixed|merge|keep> <commit|HEAD>
  • --hard:回退版本库,暂存区,工作区(因此我们修改过的代码就没了,需要谨慎使用)
  • --soft:只回退版本库
  • --mixed:回退版本库,暂存区;工作区不做改变(git reset的默认参数)
  • --merge:感觉和--hard差不多
  • --keep:感觉和--mixed差不多

  • HEAD:指的是版本库的最后一次commit
  • ^:用于commit后面,指的是指定commit的前一次commit,e.g.:
git reset HEAD^
git reset <commit>^
# 指定commit的后两次commit
git reset <commit>^^
  • 取消暂存,实质就是将暂存区回退至版本库最后一次commit的状态(git add的逆向操作)
git reset HEAD <file>
git reset HEAD .
  • 错误提交后的回滚一般使用:git reset --hard <commit>
  • reset之后发送到远程仓库需要加-f选项,强制push(很多项目的master会禁止强制发送):git push -f
  • git push -f的后悔药:git reflog

  • 修改的文件已被git commit,但想再次修改不再产生新的commit
git add sample.txt
# 修改最后一次commit
git commit --amend -m "说明"

revert

revert:是放弃指定commit,但是会生成一次新的commit,需要填写提交注释,不会从git log中删除之前的commit

  • 错误提交后的回滚一般使用:git revert <commit>

patch

生成/应用

以上是关于git常用命令的主要内容,如果未能解决你的问题,请参考以下文章

:常用工具命令第25节:常用命令 - Git命令

Git常用命令收集

Git常用命令

Git常用命令

Git常用命令

Git常用命令