Git操作

克隆仓库

git clone

查看状态

git status

把文件加入缓冲区

git add

删除文件

git rm

仅仅删除git仓库中的文件但是仍然保留在工作区(比如误提交)

git rm --cached

文件重命名

git mv

把文件从缓冲区移除

git reset HEAD

查看修改内容

git diff

查看缓冲区和已提交的修改

git diff --staged

提交

git commit
git commit --amend

查看提交历史

git log
git log --pretty=oneline
git log --pretty=format
git log --since=2.weeks
git log -p
git log --graph

还原更改(还为进入缓冲区)

git checkout – 文件名

远程仓库

git remote -v
git remote add SHORT_NAME url
git fetch
git pull
git push
git remote show XXX
git remote rename xxx xxx

分支

新建分支

git branch BRANCH_NAME

切换分支

git checkout BRANCH_NAME

新建并切换到分支

git checkout -b BRANCH_NAME

截至到某次提交创建分支
git checkout -b BRANCH_NAME COMMIT_HASH
删除本地分支
git branch -d BRANCH_NAME
删除远程分支
git push origin --delete BRANCH_NAME
推送分支到远程服务器
git push --set-upstream origin BRANCH_NAME

当然也可以是用另一种强推的方式,只不过这种方式推送了之后会把本地分支和推送过去的远程分支关联起来,以后再push的时候就不用每次都写这条指令,只需要简单的"git push"就行,另一种方式就是强推

git push origin BRANCH_NAME
远程分支已经删除,如何同步删除本地分支

当远程分支删除后,我们使用如下命令

git remote show origin

查看远程仓库的情况,会看到

* remote origin
...
  Remote branches:
    master           tracked
    refs/remotes/origin/xxx stale (use 'git remote prune' to remove) #注意这一行
  Local branches configured for 'git pull':
    ...
  Local refs configured for 'git push':
    ...
  1. 切换到要删除的分支,先git pull合并一下
  2. 删除本地分支 “git branch -d xxx”
  3. 删除对远程分支的引用
    根据相关提示,使用下面命令移除相关本地对远程分支的引用
git remote prune origin
恢复文件
1. 文件还未提交到缓冲区
git checkout -- FILE_NAME_BE_RESTORE
2. 已提交到缓冲区

即用了"git add"但是还没有"git commit"的文件

git reset HEAD FILE_NAME_BE_RESTORE
git restore FILE_NAME_BE_RESTORE 或者 git chekout -- FILE_NAME_BE_RESTORE
3. 已提交

即已用了"git commit"提交的文件,这个时候需要如下步骤
a. 找到具体要恢复的版本号

git log

假设我们找到的版本号是"9bf6c5620e2d882345ee3e1cf2cda73a2a0f7db9"
b. 使用checkout恢复到指定版本

git checkout COMMIT_HASH FILE_NAME_BE_RESTORE

git checkout 9bf6c5620e2d882345ee3e1cf2cda73a2a0f7db9 a/main/main.c

c. 使用如上命令后,文件会恢复到指定版本,然后自动add到缓冲区,需要使用commit提交

git commit -m "something"
如何在命令行中提交以"#"开头的说明,比如单号

当我们使用命令 “git commit” 的时候,会交互的要求输入提交说明,默认情况下,提交说明中以"#"开头的行都会被当作注释行从而给git过滤掉,比如这样的提交

#12345 description
related detail link

最后会变成

related detail link

以"#“开头的被过滤掉了,但是有时候我们还确实需要”#“开头,比如bug单号,所这时候可以设置一下git的注释标记字符,改成用其他字符就行,比如”;"

git config core.commentChar ";"
如何去掉git提交校验?

到.git文件夹的hooks文件夹,找到pre-commit文件,删除即可

切换分支后,相应的submodule没有自动切换(更新)?

原因为没有开启自模块的切换

git config --global submodule.recurse true

天朝git clone github的库的时候出现“Git Clone错误解决:GnuTLS recv error (-110): The TLS connection was non-properly terminated.“

apt-get install gnutls-bin
git config --global http.sslVerify false
git config --global http.postBuffer 1048576000

如何回滚?

找到需要回滚的那个提交id,然后执行指令

git reset --hard COMMIT_ID
1. 如果本地的commit还没有push

那就这样吧,该拉取合并的拉取合并,该改动的改动。当然,有的时候你可能在pull的时候发现冲突,然后又无法解决,又或者又冲突但是你只想要远端,这个时候就执行上面的指令回滚,然后正常pull。

2. 如果想把远端的也回滚了
git push --force

子模块

添加子模块
git submodule add submodule_url local_path
#例如 git submodule add http://hello_world.git ./Hello

这里默认情况下就这样添加的子模块是和远程库是断开的,也就是说你进入到子模块目录后,执行"git status",你会
看到"xxx detatched at …“,所以一般添加子模块时如果需要跟踪子模块,需要指定具体当前子模块是哪个分支,添加”-b"参数

git submodule add -b branch_name submodule_url local_path
删除子模块

删除子模块比较麻烦。

  1. 删除子模块文件夹
git rm --cached module_name
rm -rf local_module_folder
  1. 在.gitmodules文件中删除相应的子模块信息
    在这里插入图片描述

  2. 进入.git/config文件中删除相应的子模块信息
    在这里插入图片描述

  3. 删除.git/modules下的子模块文件夹
    在这里插入图片描述

初始化子模块
git submodule init
更新子模块
git submodule update

也可以使用组合命令,一次初始化和更新

git submodule update --init --recursive
暂时忽略某个文件
git update-index --assume-unchanged FILE_NAME
#取消
git update-index --no-assume-unchanged FILE_NAME
设置vim为默认编辑器
git config --global core.editor "vim"

一些问题

1. 用git更新下来后的文件,只有一些简要的信息?

文件中只有类似下面的内容:

version https://git-lfs.github.com/spec/v1 
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393 

这种问题,一般是git lfs没有安装导致文件从远端仓库拉下来之后无法解压导致,所以安装一下git lfs.
git lfs下载地址:点我
以Linux Ubuntu为例。

wget https://github.com/git-lfs/git-lfs/releases/download/v3.2.0/git-lfs-linux-amd64-v3.2.0.tar.gz
sudo tar -zxf git-lfs-linux-amd64-v3.2.0.tar.gz
cd git-lfs-3.2.0
sudo ./install.sh

2. 解决Terminal中Git base中文乱码(包括文件名乱码问题)

在命令行下输入:

git config --global core.quotepath false

3. 国内无法克隆clone github的库

配置一下

git config --global url."https://hub.fastgit.org/".insteadOf "https://github.com/"

当然也可以直接编写配置文件"~/.gitconfig",增加如下内容

[url "https://gitclone.com/github.com/"]
    insteadOf = https://github.com/

4. git SSL certificate problem: unable to get local issuer certificate

错误: git SSL certificate problem: unable to get local issuer certificate
这个问题是由于没有配置信任的服务器HTTPS验证。默认,cURL被设为不信任任何CAs,就是说,它不信任任何服务器验证。

只需要执行下面命令就可以解决:

git config --global http.sslVerify false

5. Git每次都需要输入用户名密码

这是因为本地没有配置缓存

git config --global credential.helper store

6. 设置git是否转换换行符

git config --global core.autocrlf true|false

参考文章

git submodule添加、更新和删除
Git Clone错误解决:GnuTLS recv error (-110): The TLS connection was non-properly terminated.
子模块管理和使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值