git常用命令

  1. git 命令的常见用法

# 查看git及子命令的帮助
git help <子命令> #不加<子命令>是查看git命令的帮助
git <子命令> --help #不加<子命令>是查看git命令的帮助
man git<子命令>

git version #查看版本
git init #本地仓库初始化
git init --initial-branch=main #初始化主分支为main,默认为master,注意:此为新版用法
git init bare 创建无工作区的裸库,适用于充当远程仓库,一般对应的目录以.git为后缀
git clone <repository_url> [workdir] #克隆url指定的项目的所有分支和标签对应文件到指定目录(默认为当前目录),并在本地创建此项目的git仓库,默认只显示master分支,不显示其它分支,但可以执行git checkout 分支,即可看到其它分支的文件
git clone -b develop <repository_url> #克隆url指定的项目,并切换到develop分支
git clone -b tag <repository_url> #克隆url指定的项目,并切换到指定的tag
git config --global user.name "wangxiaochun" #设置当前用户的git全局用户名,和下面两项都存储在~/.gitconfig文件中
git config --global email "29308620@qq.com" #设置全局邮箱
git config --global color.ui true #Git显示颜色会让命令输出看起来更醒目
git config --global core.editor vim #Git默认的编辑器为nano,不常用,需要修改为vim
git config --global --list|-l #列出用户全局设置,默认保存在~/.gitconfig文件中
git config --global -e #交互编辑配置

# 文件操作
git add index.html / . #添加指定文件、目录或当前目录下所有数据到暂存区
git mv file_oldname file_newname #将已经进入版本仓库存储的文件改名,注意:不支持在工作区没有存入暂存区的新创建的文件
git rm --cached file #只删除暂存区的文件,不删除工作区文件,相当于git add 反操作,和git restore --staged 功能相同
git rm cached file #从删除工作目录和暂存区删除文件
git checkout file #从暂存区复制文件到工作目录
git restore --staged <file> #新版EXPERIMENTAL命令,取消add到暂存区的文件回到工作区,重新成为untracked状态
git restore <file> #撤销已跟踪但尚未加入暂存区中的文件变更,撤销了工作区中文件的所有新的更改
git restore -s <commitid> <pathspec> #从某个提交中恢复文件
# 示例:从前一次提交中恢复README.md文件:git restore -s HEAD~ README.md

# 查看文件列表和内容
git ls-files #查看暂存区文件,选项-s显示mode bits,object name and stage number,-o显示untracked文件
git cat-file -p <blogid> #查看仓库对象的内容,仓库对象存放在.git/objects目录下

# 查看文件变化
git diff [<path>...]
git diff --staged|cached [<path>...]
git diff --cached <commit> [<path>...]
git diff [^commit] [--] [<path>...]
git diff <commit>..<commit> [--] [<path>...] #提交和提交之间的文件的区别

# 提交
git commit -m "comment" #提交文件到工作区
git commit -am "comment" #添加所有修改(不包括新文件)到暂存区并提交,相当于git add + git commit
git commit --amend --no-edit #重新覆盖上次的提交
git commit --amend -m "comment" #重新提交,覆盖上次的提交
git show [HEAD] #查看最近一次提交的详细信息,即查看HEAD当前所指向的commit的信息

# 查看日志
git status #查看工作区的状态
git log #查看提交日志
git log --oneline #查看提交日志的简要信息,一个提交一行,只显示commit_id的前七位
git log --oneline -N #查看最近N条commit日志
git log --pretty=oneline #查看提交日志的简要信息,一个提交一行,显示commit_id 全部位
git log --pretty=raw #查看提交信息,包括对应的tree对象,父提交,作者等
git log --stats #查看提交的文件的统计信息
git log -p [commit_id] #查看提交和之前提交的变化详细信息
git log --author="<author-name-pattern>" #查看指定作者的提交
git log <file-pattern> #查看指定文件的提交
git log origin/main #查看远程仓库的日志
git reflog #查看分支或其他引用在当地仓库的完整历史记录

# 回滚提交,本质上是将HEAD和master引用移到指定的commit上,是否基于指定的commit连同重置暂存区和工作区则取决于使用的选项

git reset --hard|soft|mixed HEAD^^ #git版本回滚,HEAD为当前版本,加一个^为上一个,^^为上一个版本,也可以将A换成~n
git reset --hard|soft|mixed HEAD~n #回滚前n个版本,0表示当前commit,或者~1表示前一个commit,即相当于HEAD^
git reset --hard|soft|mixed 5ae4b06 #回退到指定ID的版本,使用 git reflow 获取每次提交的ID
git reset --hard|soft|mixed v1.0 #支持tag,此处的v1.0为tag

# 分支管理
git branch #查看分支及当前所处的分支
git branch -av #查看所有本地和远程分支
git branch <分支名> #创建分支<分支名>
git branch <分支名> <commit_id> #基于指定提交创建新分支
git branch -d <分支名> #删除分支
git branch -m dev develop #修改分支名dev为develop
git branch -M main #修改当前分支名称为main
git branch -r #列出所有远程分支

# 切换分支
git checkout <分支名> #切换到已有的分支,HEAD也会自动指向目标分支上的最新提交
git checkout <tag> #切换至指定标签,检出到标签,会导致分离头指针,且新建的提交也将处于分离的状态
git checkout -b <分支名> #创建并切换到一个新分支
git checkout -b <分支名> origin/<分支名> #利用服务器远程仓库的分支,同步在本地创建分支
git checkout [commit]-- <file> ... #找回在工作区删除的已存入暂存区或提交的文件
git merge master -m <message> #将master分支合并至当前分支,无选项-m,则为交互式输入信息
git merge origin/<branch_name> #将近程分支合并到本地当前分支,通常应该将存在映射关系(通常为同一个分支名称)的分支进行合并
git merge --abort #取消合并
git switch <branchname> #切换分支。是git 2.23 版本引入的新命令,git switch 是一个只专注于分支切换的命令,而 git checkout 是一个历史悠久,有更多的用途。除了切换分支外,git checkout 还可用于还原文件、切回到特定的提交、创建新的分支等更通用的命令
git switch -c <new-branch> #抽离并创建分支,相当于git branch <new-branch> & git switch <new-branch>

# 标签
git tag <tagname> #当前commit创建轻量标签
git tag <tagname> <commit_id> #将指定commit创建轻量标签
git tag -a <tagname> -m <message> #将当前commit创建附注标签
git tag -a <tagname> -m <message> <commit_id> #将指定commit创建附注标签
git tag -d <tagname> #删除标签
git reset --hard <tagname> #回滚到指定标签
git tag #查看标签
git tag -l [<pattern>] #查看指定模式的标签
git show <tagname> #查看指定标签详细信息

# 远程仓库
git remote -v #查看远程仓库
git remote show <remote_name> #查看远程仓库详细信息,<remote_name>默认origin
git remote add <remote_name> <url> #创建远程仓库,<remote_name> 默认为origin
git remote rename origin new-origin #修改默认远程仓库名称origin为新的名称new-origin
git remote remove|rm origin #删除远程仓库的关联

# 和远程仓库推和拉
git push #将本地仓库提交代码到服务器
git push <remote_name> <branch_name> #推送指定分支到指定的远程仓库
git push origin master #将当前分支推送到远程的 master 分支
git push origin dev #将当前分支推送到远程的dev分支,如果远程没有dev会自动创建
git push -u|--set-upstream origin master #将本地master分支推送到远端仓库master,-u表示以后可用git push 替代此命令
git push origin main:dev #将本地main分支推送到远端dev分支
git push origin :dev #将空分支推送到远程dev,即删除远程dev分支
git push <remote_name> --all #推送本地仓库的所有有分支到远程
git push -u origin --all #推送所有分支
git push origin <tagname> #推送本地仓库指定的tag到远程
git push origin --tag <tagname> #推送本地仓库指定的tag到远程
git push <remote_name> --tags #将本地仓库所有的tag都推送到远程,默不会推送标签
git push --delete origin <tagname> #删除远程仓库的标签
git pull #从服务器获取所有分支的代码到本地仓库,并自动合并到本地仓库和工作区
git pull <remote_name> #拉取并合并远端分支变更为当前前分支,相当于git fetch <remote_name> 和git merge <remote_name>
git pull origin dev #从服务器指定的分支dev拉取代码到本地仓库,并自动合并到本地仓库和工作区
git fetch <remote_name> #获取远程仓库所有分支上的变更
git fetch <remote_name> <branch_name> #获取远程仓库指定分支上的变更,但不合
git fetch origin master #从远程仓库origin的master分取最新版本到本地仓库,但不合并至工作区,需要手动完成合
#忽略文件,实现不跟指定文件
vim .gitignore #定义忽略文件,即不在仓库的文件

2.综合使用案例

2.1个人小项目
2.1.1初始化项目
#进入要管理的文件夹
cd /meta-project

#执行初始化命令
git init

#管理目录下的文件状态
vim index.html
git status

#管理指定文件
git add 文件名
git add .

#个人信息配置:用户名和邮箱,只需配置一次即可
git config --global user.name "wangxiaochun"
git config --global user.email "wang@qq.com"
git config --global color.ui true

#提交
git commit -m "项目开发基本功能v0.0.1"

#查看版本记录
git log
git log --oneline

#记录图形展示
git log --pretty=oneline --graph --all
git log --graph --pretty=format:"%h %s"
git log --graph --pretty=format:'%h-%cd %s (%an, %cd)'
2.1.2开发新功能
git add.   
git commit -m 'tianjiaxingongeng'
2.1.3版本回退
git log # 查看所有的提交记录
git reflog                    #查看所有的历史提交记录
git reset --hard <commitID>  #回退到指定的commitID

新功能过审后,再回滚至之后版本,即上面’添加AR功能’的版本

git reflog                   #查看所有的历史提交记录
git reset --hard <commitID>  #回退到指定的commitID
2.1.4 业务增长:发布特定版本和紧急修复 bug

有一些特定的"轻奢"用户需要特殊的新特性,但对当前版本不希望改变

创建新分支可以给使用者提供多个不同的分支版本,意味着可以把当前工作从主线版本分离开来,以免

影响主线版本的开发。

#查看分支和当前分支
git branch 

#创建分支
git branch dev

#切换分支
git checkout dev
vim index.html
git add .
git commit -m '添加新特性'

#删除分支
git branch -d debug

#将指定分支合并至当前分支,可能产生冲突
git merge <要合并的分支>
git merge dev  #将dev的最新代码合并到当前分支
2.1.5 加班:实现多台主机的远程协作开发

项目很成功,赚得了第一桶金,购置了新的公办场地,招聘了多个员工协同开发工作

原有电脑的配置已显不足,为支持更大项目的需要,配置了新电脑,继续开发

同时时间紧张,回家也需要加班开发

2.1.5.1 将本地仓库同步至远程仓库
#给远程仓库起别名
git remote add origin <远程仓库地址>
#将当前分支的代码推送至远程
git push -u origin 分支
#推送当前已有项目到gitee仓库
git remote add origin https://gitee.com/lbtooth/meta-project.git
git push -u origin "master"
#关联远程仓库
[root@ubuntu2004 meta-project]#git remote add origin 
https://gitee.com/lbtooth/meta-project.git
#也可以将用户和密码同时关联
[root@ubuntu2004 meta-project]#git remote add origin https://<用户名>:<密码
>@gitee.com/lbtooth/meta-project.git
#查看关联
[root@ubuntu2004 meta-project]#git remote 
origin
[root@ubuntu2004 meta-project]#git remote -v
origin https://gitee.com/lbtooth/meta-project.git (fetch)
origin https://gitee.com/lbtooth/meta-project.git (push)
#推送所有分支到远程仓库
[root@ubuntu2004 meta-project]#git push -u origin --all
Username for 'https://gitee.com': lbtooth
Password for 'https://lbtooth@gitee.com': 
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.3]
remote: Create a pull request for 'debug' on Gitee by visiting:
remote:     https://gitee.com/lbtooth/metaproject/pull/new/lbtooth:debug...lbtooth:master
To https://gitee.com/lbtooth/meta-project.git
 * [new branch]     debug -> debug
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Branch 'master' set up to track remote branch 'master' from 'origin'.
#或者只推送dev分支
[root@ubuntu2004 meta-project]#git checkout dev
[root@ubuntu2004 meta-project]#git push origin dev
2.1.5.2在新电脑初次使用下载远程仓库的代码并继续开发
#克隆远程仓库代码,自动实现实现git remote add origin 远程仓库地址
git clone <远程仓库地址>
#切换分支
git checkout 分支
#在公司下载完代码后,继续开发,切换到dev分支进行开发
git checkout dev
#把master分支合并到dev
git merge master
#修改代码
git add .
#提交代码
git commit -m '继续开发新功能'
git push origin dev
2.1.5.3下班回到家继续加班
#切换到dev分支进行开发
git checkout dev
#拉取最新代码
git pull origin dev
#等价于
git fetch origin dev
git merge origin/dev
#继续开发
git add .
#提交代码
git commit -m '在家加班'
#推送至远程
git push origin dev
2.1.5.4 到公司继续开发
#切换到dev分支进行开发
git checkout dev
#拉最新代码,不必再clone,只需要通过pull获取最新代码即可
git pull origin dev
#继续开发.提交代码
git add .
git commit -m '上班工作'
#推送代码到仓库
git push origin dev
2.1.5.6 开发完毕,要上线
#将dev分支合并到master,进行上线
git checkout master
git merge dev
git push origin master
#把dev分支也推送到远程
git checkout dev
git merge master
git push origin dev
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值