自学内容网 自学内容网

【Git】Git常用命令

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,忘记了就拿出来看看,有新技术点了就在更新一下。


原文地址:https://blog.csdn.net/qq_34885615/article/details/143428777

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!