git 常用命令

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


新建代码库
# 初始化当前目录为git代码库
git init
# 创建目录并初始化git代码库,即该目录下的文件将被git管理
mkdir 目录名称 && cd $_ && git init [project-name]
下载项目
git clone <项目URL> <本地目录>
git clone <项目URL> #默认包含全部代码历史
git clone --depth=1 <项目URL> #只包含最新的提交记录
git clone -b <branch-name> --single-branch <项目URL>  # clone 下来指定的单一分支
git fetch

将远程分支的更新,全部/分支 取回本地仓库(Repository),不会影响工作目录和暂存区

git pull

拉取远程分支的更新,再与本地的指定分支合并(相当与fetch加上了合并分支功能的操作)

git push

将本地分支的更新,推送到远程主机,其命令格式与 git pull 相似

新增/修改/删除/查看状态/对比/重命名 文件
# 工作区的文件添加到暂存区(新文件或修改后都需要add到暂存区)
git add <filename> <filename> ...

# 添加指定目录(包括子目录)到暂存区
git add <dirname>

# 把工作区当前目录及子目录的所有新增(new)以及修改(modified)提交到暂存区, 但不包括被删除的文件。
git add .

# 把工作区当前目录及子目录的所有被修改的文件提交到暂存区。
git add -u

# 是上面两个功能的合集(git add --all的缩写)
git add -A

# 查看工作区文件新增修改删除状态
git status

# 显示工作区和暂存区的不同
git diff

# 查看指定文件工作区与暂存区的不同
git diff <filename> 

# 显示暂存区、工作区和最近版本的不同
git diff HEAD

# 显示本地仓库中任意两个 commit 之间的文件变动
git diff <commit-id> <commit-id>

# 显示暂存区和最近版本的不同
git diff --cached

# git diff HEAD -- readme.txt # 查看工作区readme.txt和版本库里面最新版本readme.txt的区别

# 删除工作区文件,并把此操作记录保存到暂存区
git rm <file1> <file2> ...

# 停止追踪指定文件(不受git管理), 该文件不会从工作区删除
git rm --cached <file>

# 文件改名,并把此操作记录保存到暂存区
git mv <file-oldname> <file-newname>
提交暂存区文件到本地仓库
# 提交到本地仓库 (把暂存区的所有操作一次性提交到本地仓库当前分支, 会生成一个版本号)
git commit -m "备注信息"

# 提交指定文件...
git commit <file1> <file2> <file3> ... -m "备注信息"

# 提交工作区自上次commit之后的变化,直接提交到本地仓库
git commit -a

# 提交时显示所有diff信息
git commit -v

# 重新提交(覆盖上一次的commit)
git commit --amend [file1] [file2] ... -m "备注信息"
查看信息
git log # 显示从最近到最远的**提交**的日志
git log [-n] --pretty=oneline # 美化格式: 提交版本号id 提交时的备注信息,最近n此提交
git log -p <file> # 显示指定文件每一次提交具体差异
git log --stat  # 显示commit历史,以及每次commit发生变更的文件
git log --graph 树形状提交记录,可查看分支合并信息
git log -S <keyword>  # 根据关键词,搜索提交历史
git log --follow <file>  #git whatchanged <file>  # 显示某个文件的版本历史
git shortlog -sn  # 显示所有提交过的用户,按提交次数排序
git blame <file>  # 显示指定文件是什么人在什么时间修改过
git show --name-only <commit>  # 显示某次提交的元数据和内容变化
git show <commit>:<file>  # 显示某次提交时,某个文件的内容
git reflog  # 显示当前分支的最近几次提交
# git reflog可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
# 例如执行 git reset --hard HEAD~1,退回到上一个版本
# 用git reflog则可以看到被删除的commit,用git log则是看不到被删除的commit
# 然后 git reset --hard commit 我们就可以恢复到被删除的那个版本

对比差异

git diff  # 显示工作区和暂存区的差异
git diff --cached [file]   # 显示指定文件暂存区和上一版本的差异
git diff HEAD  [file]      # 显示工作区与当前分支最近提交版本的差异
git diff --shortstat "@{0 day ago}"  # 显示今天你写了多少行代码

撤销

git checkout <file>  # 恢复这个文件到最近一次或git add或git commit时的状态
git checkout .          # 恢复当前目录所有文件内容到最近一次或git add或git commit时的状态
git checkout <commit> <file>  # 恢复指定文件到指定版本。相当于把工作区的内容修改到指定版本的文件内容后,再把修改的内容添加到暂存区。

git reset <file>         # 重置暂存区的指定文件,与上一次commit保持一 致,但工作区不变
git reset --hard        # 重置暂存区与工作区,与上一次commit保持一致
git reset <commit>  # 重置当前分支的指针为指定commit, 同时重置暂存区,但工作区不变
git reset --hard <commit>     # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --keep <commit>    # 重置当前HEAD为指定commit, 但保持暂存区和工作区不变
git reset --hard HEAD^         # 回退到上一个版本
git reset --hard HEAD^6       # 回退到上上个版本,以此类推
git reset --hard HEAD~100   # 回退到前100个版本
git reset --hard <commit>     # 回退到指定版本号(前几位,只要可以唯一识别)

git revert <commit_id>  # 新建一个commit, 用来抵消指定commit造成的变化
Git暂存管理
# 暂存当前分支的变化,之后再恢复
git stash ==> git stash pop 
git stash # 暂存
git stash list # 列所有stash
git stash apply # 恢复暂存的内容
git stash drop # 删除暂存区
git stash clear
分支
  • 查看分支合并情况
    git log --graph --pretty=oneline --abbrev-commit

  • 显示本地所有分支
    git branch

  • 显示远程所有分支
    git branch -r

  • 显示本地以及远程所有分支
    git branch -a

  • 新建本地分支
    git branch <branck>

  • 本地分支关联到远程分支
    git branch --set-upstream <local_branch> origin/<remote_branch>
    例子:git branch --set-upstream master origin/master

  • 新建本地分支,并关联到远程分支
    git branch --track <local_branch> origin/<remote_branch>

  • 以当前分支为蓝本新建分支并切换到新分支
    git checkout -b <branch>

  • 以远程分支为蓝本新建分支并切换到新分支
    git checkout -b <branch> origin/<remote_branch>

  • 新建远程分支,其实就是将本地分支推送至远程
    git push origin <local_branch>:<remote_branch>

  • 重命名本地分支
    git branch -m <new-branch-name>

  • 切换到指定分支,并更新工作区
    git checkout <branck>

  • 切换回上一个分支
    git checkout -

  • 删除分支
    git branch -d <branch> # 删除某个分支
    git branch -D <branch> # 强制删除某个分支

  • 删除远程分支
    git push origin --delete <remote_branch>
    git branch -dr <remote/branch>
    git push origin :<remote_branch> # 推送了一个空的分支到远程覆盖了原来的远程分支

  • 合并指定分支到当前分支
    git merge <branch>

  • 衍合指定分支到当前分支
    git rebase <branch>

  • 选择一个commit, 合并进当前分支
    git cherry-pick <commit>

标签
# 查看tag
git tag # 查看所有tag
git show <tag_name> # 查看指定tag

# 查看标签详细信息
git tag -ln

# 新建tag
git tag <tag_name> # 基于最新提交创建标签
git tag -a <tag_name> -m "tag_msg" # 附注标签
git tag -a <tag_name> <commint_id> # 给某次提交添加标签

# 删除tag
git tag -d <tag_name>

# 提交某个tag到远程
git push origin <tag_name>

# 推送全部未推送过的本地标签 到远程
git push origin --tags

# 新建一个分支, 指向某个tag
git checkout -b <branch> <tag>

# 显示当前分支的最近的 tag
git describe --tags --abbrev=0

# 删除远程分支或标签
git push <remote> :<branch/tag-name>
远程操作
# 显示所有远程仓库
git remote -v

# 显示某个远程仓库的信息
git remote show [ remote ]

# 重命名远程仓库:
git remote rename demo test

# 从远程仓库克隆
git clone git@github.com:xxx/xxx.git

# 获取远程其他分支
git checkout -b dev origin/dev

# 更改远程仓库的 url
git remote set-url origin <URL>

# 抓取远程仓库所有分支更新并合并到本地
git pull 

# 抓取远程仓库所有分支更新并合并到本地,不要快进合并
git pull --no-ff

# 抓取远程仓库的所有变动
git fetch origin

# 取回远程仓库的变化,并与本地分支合并
git pull [remote] [branch]

# 本地目录添加远程库
git remote add <名称> <远程库地址>
git clone <远程库地址> <名称>   #不需要git init

# 上传本地指定分支到远程仓库
git push [remote] [branch]

# 强行推送当前分支到远程仓库,即使有冲突
git push [ remote] --force

# 推送所有分支到远程仓库
git push [ remote] --al1

# 强制远程覆盖本地
git fetch --all
git reset --hard origin/<remote_branch_name>

# 推送分支(会推送到远程对应的分支上)
git push <远程主机名> <本地分支名>:<远程分支名> 若省略远程分支,代表将本地当前分支推送到远程对应分支
git push origin master #推送到远程的master
git push origin dev #推送到远程的dev


合并衍合

git rebase master feature_a  # 将master rebase到分支feature_a,前提是feature_a没有push过

# 合并分支
git checkout master # 切换到主分支
git merge dev #把dev分支合并到当前分支

解决冲突
# 假如在dev分支上修改了readme并且已commit提交,master分支上也修改readme,并且修改了同一行,也commit提交了,
那么 在master执行git merge dev 会报错
# 手动解决冲突代码,然后add

# 撤销某一次合并
git revert <merge_commit_id> -m number 

# git pull --rebase有冲突后,解决冲突,使用 git add .然后使用git rebase --continue
# 切换到某个分支,将其他分支的某次提交应用到该分支
git checkout <branch_name>
git cherry-pick <commit id>

# 前者(左开右闭,不包含start-commit_id)的提交cherry-pick到当前分支;到后者之间(闭区间,包含start-commit_id)的提交cherry-pick到当前分支。
git cherry-pick <start-commit_id>..<end-commit_id>
git cherry-pick <start-commit_id>^..<end-commit_id>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值