git命令

Table of Contents

🕸️ 来源于阮一峰的网络日志

Git远程操作详解

常用 Git 命令清单

Untitled

安装完成后 需要最后一步设置

#  --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                     # 查看本地仓库文件

git

远程仓库的创建

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为行尾。

参考:*git如何避免”warning: LF will be replaced by CRLF“提示?*