【Git】Git常用命令
目录
- 1 前言
- 2 git命令
- 2.1 branch
- 2.2 checkout
- 2.3 pull and push
- 2.4 config
- 2.4.1 Proxy
- 2.5 tag
- 2.6 rebase
- 2.7 patch
- 2.8 remote
- 2.9 submodule
- 2.10 rm
- 2.10 gitignore
- 2.11 某个commit更改了哪些文件
- 2.12 clean
- 3 结束语
1 前言
本章记录总结在使用git过程中常用的一些命令,方便查看。
2 git命令
2.1 branch
//查看本地和远程分支
git branch -a
在执行git branch -a时,远程已经删除的分支但仍然显示了,或者远程有新分支没有显示的,可以使用下边的命令进行更新同步。
git fetch --prune
//本地分支与远程哪个分支相关联
git branch -vv
如果与远程有关联,则会先显示本地分支名+commit id+远程分支名,如果没有关联,则只会显示本地分支。
//让本地分支与远程某个分支关联
git branch -u <remote>/<branch> <local_branch>
//与上边等价的命令
git branch --set-upstream-to=<remote>/<branch> <local_branch>
/*设置上游分支后,你可以使用 git pull 和 git push 命令来同步远程和本地分支,而不需要每次都指定远程分支的名称。*/
//查看本地与远程关联的分支
git config --list
//本地分支重命名
git branch -m old_branch new_branch
2.2 checkout
//切换分支
git checkout <branch-name>
//创建一个新分支并同时切换到它
git checkout -b <new-branch-name>
//检出特定的提交,处于分离 HEAD 状态
git checkout <commit-hash>
//用于恢复工作树中被修改的文件到仓库中的版本
git checkout -- <file-path>
//clone远程某个分支
git clone -b branch_name <remote-URL>
//如果已经clone下来了,需要拉取远程某个分支。
git checkout -b feature-branch origin/feature-branch
//检出本地标签
git checkout <tag-name>
//看一下远程都有什么tag
git fetch --tags
//将远程标签 v1.0.0 拉取到本地
git checkout tags/v1.0.0
//从标签 v1.0.0 创建一个名为 release-1.0 的新分支
git checkout -b release-1.0 tags/v1.0.0
想在旧仓库的基础上创建一个没有commit记录的新分支,使用如下指令。
git checkout --orphan new_branch
2.3 pull and push
git pull origin <远程分支名>:<本地分支>
git push origin <本地指定分支名>:<远程指定分支名>
//加上-u参数可以将本地分支与远程分支关联起来,
//以后直接使用git push和git pull即可
git push -u origin <本地指定分支名>:<远程指定分支名>
git pull origin master -- /src
git pull origin master – /src // 这将只更新/src文件夹中的更改,并将其合并到本地master分支中
git push origin master:path/to/src //将仅上传 src 文件夹下的更改,并将它们推送到名为 master 的远程分支
2.4 config
config配置的选项内容在windows下保存在C:\Users\<user-name>\.gitconfig
文件中,可以直接打开更改查看,也可以使用命令配置查看。
//查看配置
git config --list
在进行与远程仓库连接时,一般可用两种方式,一是Git凭据,二是SSH密钥对。
如果使用的是Git凭证,可当用户名或者密码更改了,需要重设时,可使用如下命令。
git config --global --unset credential.helper
/*此处使用--global参数,意味着该行为只影响系统上当前用户,如果使用--system参数,意味着将影响系统上所有用户的git行为。*/
//以下命令用于解决每次都要输入密码的问题
git config --global credential.helper store
git config --global user.name"名字"
git config --global user.email"邮件"
可以给常用的一些命令设置一些别名,我一般直接在.gitconfig
文件中直接更改的。
[alias]
co = checkout
ci = commit
com = commit
st = status
br = branch
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
sw = switch
2.4.1 Proxy
设置全局代理。
# 设置 HTTP 代理
git config --global http.proxy http://xxx.xxx.xxx.xxx:port
# 设置 HTTPS 代理
git config --global https.proxy http://xxx.xxx.xxx.xxx:port
# 清除全局 HTTP 代理
git config --global --unset http.proxy
# 清除全局 HTTPS 代理
git config --global --unset https.proxy
设置临时代理,只对当前终端有用。
# 设置 HTTP 代理环境变量
export http_proxy=http://xxx.xxx.xxx.xxx:port
# 设置 HTTPS 代理环境变量
export https_proxy=https://proxyuser:proxypass@proxy.server.com:8080
# 清除环境变量(可选)
unset http_proxy
unset https_proxy
2.5 tag
//显示远程tag
git ls-remote --tags origin
//将远程tag下载到本地
git fetch --tags
//删除本地tag
git tag -d <tag_name>
//删除远程仓库tag
git push origin :refs/tags/v1.0.1
推送tag,注意推送一个tag(标签)到远程仓库,并不直接意味着所有之前的commit记录也会被推送,tag只是对你已经推送到远程仓库的commit记录的一个额外标记。
//推送单个tag
git push origin v1.0
//推送所有tags
git push origin --tags
2.6 rebase
使用rebase可以对commit进行变基或者修改commit信息,我在开发中经常使用的地方是在本地时,会提交很多commit记录,但在push到远程仓库前,我会使用rebase将commit记录合并整理,使其更简洁。
git rebase -i commit_id
//-i, 想删除某次commit之前的记录。
//-d, drop 丢弃commit,将某次的内容修改也丢弃了。
//-r, reword 使用commit,修改commit信息。
//-s, squash 使用commit,将commit信息合并到上一个commit中。
//-f, fixup 使用commit,丢弃commit信息。
//修改最后一次commit信息
git commit --amend
//修改并合并第一次commit信息
git rebase -i --root
2.7 patch
生成补丁。
//commit_id是指要做的log前边一个
git format-patch commit_id
//生成两个commit id之间的patch
git format-patch 365a..4e16
打补丁。
git am patch_file
有的时候,由于冲突没成功,解决冲突后需要再次打补丁时,需要放弃上次的动作。
git am --abort
2.8 remote
//查看远程地址
git remote -v
//删除远程地址
git remote rm origin
//增加远程地址
git remote add origin url_link
//或者直接更改远程仓库地址
git remote set-url origin new_url_link
2.9 submodule
//新增举例,semtech_radio/SWDR001不能提前创建,不然会提示已经存在git。
git submodule add https://github.com/Lora-net/SWDR001.git semtech_radio/SWDR001
//查看有哪些submodule
git submodule
拉取带有submodule的仓库。
//clone时,添加--recursive参数
git clone <remote-URL> --recursive
//仓库已经存在
git submodule update --init --recursive
//删除submodule
git submodule deinit <submodule_path>
2.10 rm
如果某个文件本来在git的版本管理中,现在想要去掉。
//在git管理中去除文件file_name,如果使用“.”,则意味着去除当前目录下全部文件。
git rm -r --cached file_name
2.10 gitignore
我们一般会在仓库根目录下添加文件.gitignore
,用于排除一些不想纳入git管理的文件,怎么知道是.gitignore
中哪条语句在控制这个文件呢?
git check-ignore -v file_name
2.11 某个commit更改了哪些文件
//查看所有commit,每个commit更改了哪些文件
Git log --stat
//查看某个commit更改了哪些文件
Git show --raw commit_id
2.12 clean
有些文件没有被git纳入管理,想要删除的时候可以使用clean命令,但如果这个文件使用git add加入过,clean命令对这个文件就无用了。
//一般使用以下命令即可
git clean -df
//n:显示将要删除的文件,但不会执行。可以-ndf一起使用,不会删除。
//d:递归删除
//f:强制删除
//x:默认不删除gitignore匹配的文件,加上-x将会删除匹配文件
3 结束语
本章相当于一个日常cheat sheet,忘记了就拿出来看看,有新技术点了就在更新一下。