git命令
Table of Contents
🕸️ 来源于阮一峰的网络日志
安装完成后 需要最后一步设置
# --global参数 这台机器上的所有仓库都会使用这个配置
git config --global user.name "you name"
git config --global user.email "email@exemple.com"
工作区:git init的文件夹就是一个工作区 版本库:工作区里面一个隐藏目录 .git (里面有暂存区和master分支)
git add把文件添加进去,实际上是把文件修改添加到暂存区里面,git commit提交更改,实际上是把暂存区的所有内容提交到当前分支上。
git init # 把当前目录编程git管理的仓库
git add <file> # 把当前文件添加到仓库 可以同时添加多个文件
git commit -m "message" # 把文件提交到仓库, -m 后边的是本次提交说明
git status # 查看当前工作区的转态,是否有文件修改
git diff # 查看修改内容
git log # 显示从最近到最远的提交日志,
git reflog # 查看历史命令,以确定回到那个版本
git log --pretty=oneline # 只显示commit_id (版本号)
git reset --hard commit_id # HEAD指向的版本是当前版本,可以根据commid 回退
git diff HEAD -- <file> # 查看工作区与版本库里面最新版本的区别
git checkout - - file 把file中在工作区的修改全部撤销
分两种情况,一种是file自修改后还没有被放到暂存区,现在撤销修改就回到了和版本库一样的状态;一种是file已经添加到了暂存区,又作了修改,现在撤销修改就回到添加到暂存区后的转态。
git reset HEAD <file> # 把暂存区的修改撤销掉,重新放回工作区,HEAD表示最新的版本
git checkout -- <file> # 丢弃工作区的修改 -- 重要
git ls-files # 查看本地仓库文件
远程仓库的创建
ssh-keygen -t rsa -C “youemail@example.com” 用户主目录下.ssh目录, 存放着SSHkey的秘钥对。id_rsa.pub(公钥) , id_rsa(私钥)
在GitHub上创建好远程仓库后,与本地仓库进行关联。
# 本地仓库和远程仓库进行关联
git remote add origin git@github.com:<username>/<files>
# 把本地库的所有内容推送到远程库上
git push -u origin master
# 删除关联的远程库
git remote rm origin
ursename: 你自己github的账户名; files:你创建的远程仓库名称
origin 可换成github 或者gittee(码云)
第一次推送远程仓库需要加上 -U 参数把本地的master分支和远程的maser分支关联起来。以后就可以简化命令,不需要-u 参数。(第一次提交会有警告,输入yes回车就可以了)
从远程仓库克隆一本地库
# 从远程仓库拉取到本地
git clone git@github.com:<username>/<files>.git
删除git远程仓库的文件
# 删除test文件夹下的a.txt文件
git rm -r --cached test/a.txt
# 执行 删除缓存 提交删除说明
git commit -m "删除a.txt文件"
创建分支和合并分支
# 创建分支并切换到分支上
git checkout -b <name>
# 上下两个命令等价
git branch <name>
git checkout <name>
# 查看当前分支(列出所有分支,当前分支上会有*号)
git branch
# 合并分支 (先切换,再合并)
git checkout <name> # 切换到指定分支
git merge <name> # 合并指定分支到当前分支
# 删除分支dev
git branch -d <name>
bug 分支
# 隐藏当前工作现场,清空工作区创建临时分支
git stash
git stash list #查看之前的工作现场
# 恢复之前工作区有两个办法
git stash apply
git stash drop # 第一种方法
git stash pop # 第二种方法
# 可以多次使用stash, 恢复时先查看隐藏的工作现场,再使用以下命令
git stash list
git stash apply stash@{<int>}
恢复之前隐藏工作区的两种方法的区别是,第一种恢复后stash内容并不删除,需要手动删除,第二种方法是恢复的同时把stash内容也删除了
开发一个新ferture,最好先新建一个分支,如果丢弃一个没有被合并过的分支,可以通过 git branch -D
强行删除
# 查看远程库信息
git remote -v
# 从远程抓取分支
git pull
# 从本地推送分支
git push origin branch-name
创建和操作标签
先切换到需要打标签的分支上
# 创建版本标签
git tag <name>
# 创建带有说明的标签
git tag -a <name> -m "message"
# 查看所有标签
git tag
# 历史版本创建标签
git tag <name> commit_id
# 查看标签信息
git show <tagname>
# 删除标签
git tad -d <tagname>
# 推送某个标签到远程
git push origin <tagname>
# 一次性推送所有本地未推送的标签到远程
git push origin --tags
#删除远程标签,先本地删除,在远程删除
git tag -d <tagname>
git push origin :refs/tags/<tagname>
使用.gitignore文件排除提交目录
在git提交中想要忽略某些文件(数据库、缓存文件)等,可以在.gitignore 文件中进行编辑排除
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
如果发现commit 后有些文件并没有被排除,则需要清空本地缓存后重新提交。如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的
# 清楚缓存的命令
git rm -r --cached .
git add .
git commit -m "update gitignore"
连接远程失败
fatal: '/srv/program/workcode.git' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
因为是在服务器上自建的git服务。直接使用了root账号初始化了git仓库。直接从本地提交没有对相关目录的操作权限。
解决办法:使用chown -R git:git xxx.git
命令更改仓库文件夹的权限。
CRLF问题
在Windows中使用CRLF标识一行的结束,而在Linux/UNIX系统中只使用LF标识一行的结束。CRLF即Carriage-Return Line-Feed的缩写。
通常情况下,Git库不会自动修改文件内容,但是默认会将入库的文件的行尾符设置为LF,会将检出的文件的行尾符设置为CRLF。但是在执行如下操作时出现如下警告:
warning: LF will be replaced by CRLF in Pipfile
The file will have its original line endings in your working directory
工作目录中的文件的行尾是LF,但是这里在即将入Git库之前,却将LF转换为CRLF。所以给出警告。该警告无伤大雅,因为在Git库中的该文件仍然以LF为行尾。