--- title: Git常用命令 date: 2021-06-10 15:29:26 updated: 2021-12-20 19:45:34 tags: categories: keywords: description: top_img: comments: cover: toc: toc_number: toc_style_simple: copyright: copyright_author: copyright_author_href: copyright_url: copyright_info: katex: true highlight_shrink: aside: --- ## ![Git常用命令.md-fig-0.png](https://imgs-1302910354.cos.ap-shanghai.myqcloud.com/images/Git常用命令.md-fig-0.png) 作者:gybguohao 链接:https://www.jianshu.com/p/cdccfef91ae1 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ## 简介 git有四个工作区域,分别是:工作目录(Workspace)、暂存区(Index/Stage)、本地仓库(Repository)、远程仓库(Remote) ## 配置 ### git config git config命令的作用是配置git的相关信息。 1. 配置全局的用户名和邮箱,mac下可通过终端输入命令cat ~/.gitconfig查看配置信息。 - 设置用户名:git config --global user.name "name" - 设置用户邮箱:git config --global user.email "eamil" 2. 针对单个仓库配置用户名和邮箱,mac下可通过终端进入到项目的根目录中,然后输入命令cat .git/config查看配置信息。 - 设置用户名:git config user.name "name" - 设置用户邮箱:git config user.email "eamil" 3. 查看git所有配置信息:git config --list 4. 查看配置的用户名:git config user.name 5. 查看配置的用户邮箱:git config user.email 6. 定义命令别名: - git config --global alias.st status:则git status可用git st代替 - git config --global alias.co checkout:则git checkout可用git co代替 - git config --global alias.ci commit:则git commit可用git ci代替 - git config --global alias.br branch:则git branch可用git br代替 也可以自定义其他命令的别名,主要合理且方便操作即可。 ### 秘钥配置 - mac终端查看是否已经存在SSH密钥:cd ~/.ssh,如果没有密钥则不会有此文件夹。 - 生成新的秘钥, 命令如下 ssh-keygen -t rsa -C "eamil" 你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,因为这个Key仅用于简单的服务,所以也无需设置密码。完成后会有如下显示Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/gybguohao/.ssh/id_rsa。 Your public key has been saved in /Users/gybguohao/.ssh/id_rsa.pub。 The key fingerprint is: SHA256:5V6ZCQNS/3bVdl0GjGgQpWMFLazxTslnKbW2B1mbC+E eamil如果服务器端需要公钥, 直接复制.ssh目录下的id_rsa.pub内容即可。 ### gitignore .gitignore文件的作用是忽略那些没必要的提交,比如系统环境或程序运行时产生的文件。GitHub为我们提供了各个语言的gitignore合集[github/gitignore](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fgithub%2Fgitignore),其中也包括[Android.gitignore](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fgithub%2Fgitignore%2Fblob%2Fmaster%2FAndroid.gitignore)。 ### 将本地新建的项目提交到远程仓库的步骤 - 初始化本地仓库git init - 将本地内容添加至git本地暂存区中git add . - 将暂存区添加至本地仓库中git commit -m "first commit" - 添加远程仓库路径git remote add origin https://github.com/gybguohao/test.git - 将本地内容push至远程仓库中git push -u origin master ## 常用命令 ### git add git add命令的作用是将文件从工作目录添加至暂存区 1. 把所有修改的信息添加到暂存区:git add . 2. 把所有跟踪文件中被修改过或已删除的文件信息添加至暂存区:git add -u或git add --update,它不会处理那些没有被跟踪的文件 3. 把所有跟踪文件中被修改过或已删除文件和所有未跟踪的文件信息添加到暂存区:git add -A或git add --all 注意:git add .和git add -A在2.x版本中提交类型方面功能相同,但会因为所在目录不同产生差异: - git add .只会提交当前目录或者子目录下相应文件。 - git add -A无论在哪个目录执行都会提交相应文件。 已经被提交到暂存区的文件,可以通过命令git reset HEAD -- fileName撤销提交。或者使用git reset HEAD撤销此次提交。 ### git am ### git branch git branch命令的作用主要是做分支管理操作。 1. 查看本地分支:git branch 2. 查看本地和远程分支:git branch -a 3. 新建名字为test的分支:git branch test 4. 将test分支名字改为dev:git branch -m test dev 5. 删除名字为dev的分支:git branch -d dev 以上命令都是针对本地仓库操作,不影响远程仓库。 ### git checkout git checkout命令最常用的情形是创建和切换分支以及撤销工作区的修改。 1. 切换到tag为v1.0.0时对应的代码:git checkout v1.0.0 2. 在tag为v1.0.0的基础上创建分支名为test的分支:git checkout -b test v1.0.0。该命令相当于以下两条命令: - git branch test v1.0.0:在v1.0.0的基础上创建分支test - git checkout v1.0.0:切换到分支test 3. 撤销工作目录中文件的修改(文件有改动但还未git add):git checkout -- fileName,或者撤销所有修改使用git checkout . ### git commit git commit命令的作用是将暂存区的修改提交到本地仓库,同时会生成一个commmit id。 1. 将暂存区的修改提交到本地仓库:git commit -m "message","message"是本次提交的简述内容,比如添加新功能或修复bug等 2. 将工作目录中修改后还未使用git add .命令添加到暂存区中的文件也提交到本地仓库:git commit –a –m "message",该命令相当于以下两条命令: - git add .:把所有修改的信息添加到暂存区 - git add -m "message":将暂存区的修改提交到本地仓库 3. 修改最后一次提交(可用于漏掉某个文件的提交或重新编辑信息):git commit --amend ### git fetch git fetch命令的作用是将远程仓库上更新同步到本地仓库,并记录在.git/FETCH_HEAD中 1. 同步远程仓库上所有分支的更新:git fetch origin 2. 同步远程仓库上master分支的更新:git fetch origin master 3. 在本地新建test分支,并将远程仓库上master分支代码下载到本地test分支:git fetch origin master:test ### git format-patch git format-patch命令的作用是将commit提交的代码修改以及描述信息保存在后缀名为.patch文件中,然后配合git am命令使用。 1. 生成最近n次commit的ptach:git format-patch -n 2. 生成某个commit的patch:git format-patch -1 3. 生成某个commit以来的所有patch:git format-patch ,其中不包含该commit 4. 生成某两个commit之间的patch:git format-patch ..,其中不包含第一个commit,但包含第二个commit,即是开闭区间 ### git init git init命令的作用是在当前目录中初始化仓库,并且创建一个名为.git的子目录,该目录含有你初始化的git仓库中所有的必须文件。 ### git log git log命令的作用是查看历史提交记录 1. 查看历史提交记录:git log 2. 将每条历史提交记录展示成一行:git log --oneline,也可以使用git log --pretty=oneline 3. 查看某个人的提交记录:git log --author="name" 4. 显示ASCII图形表示的分支合并历史:git log --graph 5. 显示前n条记录:git log -n 6. 显示某个日期之后的记录:git log --after="2018-10-1",包含2018年10月1号的记录 7. 显示某个日期之前的记录:git log --after="2018-10-1,包含2018年10月1号的记录 8. 显示某两个日期之间的记录:git log --after="2018-10-1" --before="2018-10-7" ### git merge git merge命令的作用主要是分支的合并。 1. 如果当前是master分支,需要合并dev分支:git merge dev ### git pull git pull命令的作用是获取远程仓库的更新,再与本地分支合并。git pull <远程仓库名> <远程分支名>:<本地分支名> 1. 取回远程仓库上的dev分支与本地的master分支合并:git pull origin dev:master 2. 取回远程仓库上的dev分支与当前分支合并:git pull origin dev,该命令相当于以下两条命令: - git fetch origin dev:获取远程仓库上dev分支的更新 - git merge origin/dev:当前分支合并dev分支 注意:通过git fetch所取回的更新,在本地仓库上需要用“远程仓库名/分支名”的形式读取,比如origin仓库的master分支,就需要用origin/master来读取。 ### git push git push命令的作用是将本地仓库的更新推送到远程仓库上。git push <远程仓库名> <本地分支名>:<远程分支名> 1. 将本地仓库master分支的更新推送到远程仓库上:git push origin master,也可以直接使用git push origin,会将本地分支推送到与之存在追踪关系的远程分支。 2. 删除远程dev分支:git push origin --delete dev ### git remote git remote命令的作用主要是管理远程仓库。 1. 查看关联的远程仓库的名称:git remote 2. 查看关联的远程仓库的详细信息:git remote -v 3. 添加远程仓库的关联:git remote add origin <远程仓库地址> 4. 删除远程仓库的关联:git remote remove <远程仓库名称> 5. 修改远程仓库的关联:git remote set-url origin <新的远程仓库地址> 6. 更新远程仓库的分支:git remote update origin --prune ### git reset git reset命令的作用是撤销暂存区的修改或本地仓库的提交。 1. 撤销已经提交到暂存区的文件(已经git add但还未git commit): - 撤销已经提交到暂存区的文件:git reset HEAD fileName或git reset --mixed HEAD fileName - 撤销所有提交:git reset HEAD .或git reset --mixed HEAD . 2. 对已经提交到本地仓库做撤销(已经git commit但还未git push): - 将头指针恢复,已经提交到暂存区以及工作区的内容都不变:git reset --soft commit-id或git reset --soft HEAD~1 - 将头指针恢复并且撤销暂存区的提交,但是工作区的内容不变:git reset --mixed commit-id或git reset --mixed HEAD~1 - 将所有内容恢复到指定版本:git reset --hard commit-id或git reset --hard HEAD~1 注意:commit id可通过git log查看(取前六位即可),HEAD~1表示前一次提交(可以此类推)。 ### git revert ### git stash git stash命令的作用是保存当前分支工作目录所做的修改。即如果当前分支所做的修改你还不想提交,但又需要切换到其他分支去查看,就可以使用该命令。 1. 保存当前进度:git stash 2. 查看已经保存的历史进度记录:git stash list 3. 重新应用某个已经保存的进度,并且删除进度记录:git stash pop <历史进度id>, 4. 重新应用某个已经保存的进度,但不删除进度记录:git stash apply <历史进度id>,如果直接使用git stash默认是使用最近的保存 5. 删除某个历史进度:git stash drop <历史进度id> 6. 删除所有的历史进度:git stash clear ### git status git status命令的作用是显示文件状态,红色表示工作目录的文件被修改但还没有提交到暂存区,绿色表示已经提交到暂存区。 1. 以极简的方式显示文件状态:git status -s - A:本地新增的文件(服务器上没有) - C:文件的一个新拷贝 - D:本地删除的文件(服务器上还在) - M:红色为修改过未被添加进暂存区的,绿色为已经添加进暂存区的 - R:文件名被修改 - T:文件的类型被修改 - U:文件没有被合并(你需要完成合并才能进行提交) - X:未知状态(很可能是遇到git的bug了,你可以向git提交bug report) - ?:未被git进行管理,可以使用git add fileName把文件添加进来进行管理 已经被修改但还没提交到暂存区的文件,可以通过命令git checkout -- fileName撤销更改。 ### git tag git tag命令主要是对项目标签进行管理。 1. 查看已有的标签历史记录:git tag 2. 给当前最新的commit打上标签:git tag <标签的定义> 3. 给对应的commit id打上标签:git tag <标签定义> ### git rm git rm 文件 //本地中该文件会被删除 git rm -r 文件夹 注意: 上面的方法会把对应的本地文件也删除掉,如果不想把本地文件删除,只把缓存区中的对应部分删除,则加上`--cached` git rm --cached 文件 //本地中该文件不会被删除 git rm -r --cached 文件夹 //删除文件夹 ## Github上传大文件 首先下载git-lfs(https://github.com/git-lfs/git-lfs),安装好后进入本地仓库目录,执行下面的命令。 ```cmd git lfs track "file" ``` **file**是需要上传的大文件。执行完命令后会发现目录下生成了一个"**.gitattributes**"文件,文件内记录了我们要上传文件的信息。只有先把".gitattributes"传上去,才可以上传大文件。 ```cmd git add .gitattributes git commit -m "submit file" git push -u origin master ``` 上传完毕后,开始上传大文件。 ```cmd git add file git commit -m "add file" git push -u origin master ``` 出现下面的进度条,就说明文件正在上传中啦~ ![image-20221025201937900](https://imgs-1302910354.cos.ap-shanghai.myqcloud.com/images/image-20221025201937900.png)