【转】git命令集

点击鼠标右键,选择git bash,即可打开Windows下的命令行工具,接着进行后续git操作。

一、学习链接

https://git-scm.com/docs

https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2

二、Git相关配置

1 $git config --global user.name “abc”;
2 $git config --global user.email “abc@qq.com”
3 $git config --list

三、Git支持多种数据传输协议

1 本地协议
2 HTTP协议,即http(s)://
3 SSH协议,即user@server:path.git
4 GIT协议,即git://

四、Git常见缩写

 1 -a指-all 
 2 -b指branch
 3 -d指--delete
 4 -f指force
 5 -h指help
 6 -m指--move或者--merge
 7 -p指--patch(补丁)
 8 -r指--remote
 9 -t指--track
10 -u指--set-upstream
11 -v指verbose(详细信息)

五、Git基本命令

 1 $git help:查看系统自带的帮助文档
 2 $git status:检查当前工作区文件修改状态
 3 $git show:显示一个标签或一个提交的信息,具体代码
 4 $git tag:为代码历史记录中的某一个点指定永久的标签,列出本地标签
 5 $git tag tagName:新建标签
 6 $git tag -d tagName:删除标签
 7 $git log:查看提交历史,显示head所指向的commit为止的所有记录,查看本地日志
 8 $git log -p fileName:查看指定文件的提交历史(文件名要写全,包括后缀)
 9 $git log dev ^master:查看dev有,master没有
 10 $git log master ^dev:查看dev没有,master有
 11 $git log master..dev:查看dev比master多提交了哪些内容
 12 $git log dev..master:查看master比dev多提交了哪些内容
 13 $git log dev...master:不知道哪个分支提交多,哪个分支提交少,单纯想知道不一样。
 14 $git log --left-right dev...master:显示每个提交在哪个分支上,commit后面的左箭头表示dev的,右箭头表示提交在master上。
 15 $git log -p -2:查看最近两次更新内容的差异
 16 $git diff:显示更新了哪些部分,即工作区文件和缓存区文件的差异
 17 $git diff --cached:显示缓存区文件和上次提交文件的差异
 18 $git log --reverse:逆向显示所有日志
 19 $git log --pretty=format:%B:定制格式输出日志 比如feat:修复报错,键盘拨起
 20 $git reflog:查看本地操作记录
 1 $git reset HEAD .:把暂存区的修改撤销掉。用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^
 2 $git reset HEAD^:把所有内容回退到上一个版本
 3 $git reset HEAD ^fileName:把文件回退到上一个版本
 4 $git reset --mixed:回退到某个版本,回退commit和index信息,只保留源码
 5 $git reset --soft:回退到某个版本,回退commit信息,如果还要提交,直接commit
 6 $git reset --hard<ID>:彻底回退到某个版本,本地源码也会变为上一个版本的内容
 7 $git reset --hard origin/master:将本地的状态回退到和远程一样
 8 $git reset:撤销某次提交,此次操作后的commit都会被退回暂存区
 9 $git revert:撤销某次操作,此次操作前的commit都会被保留
 10 $git bisect:通过二分查找哪个提交导致bug
 11 $git blame:标注文件的行,指出每行的最后提交信息及提交作者
 12 $git blame fileName:以列表方式查看指定文件的提交历史
 13 $git grep:在源码中甚至文件中查找任何字符串或正则表达式
1 $git remote add repoName url:添加远程仓库
2 $git remote rm repoName:移除远程仓库
3 $git remote rename oldRepo newRepo:重命名远程仓库
4 $git remote show origin:查看远程仓库状态
5 $git remote -v:查看远程服务器地址和仓库名称
 1 $git pull=git fetch+git merge
 2 $git pull origin develop:更新develop分支
 3 $git pull origin remoteBranchName : localBranchName:从origin主机拉取remoteBranchName分支,与localBranchName分支合并
 4 $git pull origin remoteBranchName:远程分支与当前分支合并
 5 $git pull --rebase origin remoteBranchName:localBranchName:从origin主机拉取remoteBranchName分支,然后推送本地分支到远端(变基)
 6 $git fetch origin:拉取远程仓库有,但本地没有的信息
 7 $git merge branchName:把一个分支的修改合并到当前分支
 8 $git merge origin/master:将远程主分支合并到本地当前分支
 9 $git rebase branchName:把一个分支的修改合并到当前分支
10 $git rebase --skip:跳过,忽略冲突
11 $git rebase --abort:取消合并,取消本次变基
12 $git rebase --continue:处理完冲突,继续合并

13.$git merge 和$git rebase的区别?

(1)前者适合琐碎的简单合并,全部合并结束后,再进行内部整理;

(2)后者适合系统级合并,边合并边整理。使用rebase合并时,本地仓库要足够干净。

(3)变基是代码变化合并的一种方式。合并是大炮,把冲突一次性解决,变基是连发手枪,每次解决一个提交的冲突。

1 $git clone url:克隆代码库,默认拷贝跟踪远程的master分支
2 $git submodule init:初始化子模块
3 $git submodule update:更新子模块
4 $git add .:添加当前目录下的所有文件和子目录 
5 $git add fileName

(1)把已跟踪的文件(文件修改)放到暂存区(缓存区);

(2)合并时,把有冲突的文件标记为已解决的状态;

(3)根据目标文件状态的不同,命令产生的效果也不同。

 1 $git rm fileName:从工作目录和暂存区移除文件
 2 $git rm --cached fileName:从暂存区移除但不从工作目录移除文件 
3
$git mv a.txt b.txt:把a.txt改名为b.txt,重命名文件 4 $vim fileName:查看该文件源代码 5 $git commit:跳出文本编译器,写多行commit提交信息。 6 $git commit -m “提交说明”:提交文件修改 7 $git commit -a -m “提交说明”:跳过git add那步 8 $git commit -am “提交说明”:跳过git add那步 9 $git commit --amend:撤销提交、修改最后一次提交 10 $git branch branchName:创建分支 11 $git branch -t newBranchName origin / remoteBranchName:从远端拉分支 12 $git checkout -b branchName:创建并切换到该分支上 13 $git checkout -b newBranchName oldBranchName :基于旧分支创建新分支 14 $git checkout -b localBranchName origin / remoteBranchName:基于远程分支创建本地分支 15 $git checkout branchName:切换到已经存在的分支 16 $git checkout -f branchName:强制切换 17 $git checkout .:撤销所有修改 18 $git checkout filenamepath:撤消对文件的修改 19 $git branch -d branchName:删除本地分支,如果分支没有被合并,会提示删除失败 20 $git branch -D branchName:强制删除,即使分支没有被合并,也照删不误 21 $git branch -d -r branchName:删除远程分支 22 $git branch -m|-M oldBranchName newBranchName:重命名分支,如果新分支已经存在,则需要使用-M强制重命名 23 $git branch:列出当前仓库下的所有分支,显示所有本地分支 24 $git branch -r:显示所有远程分支 25 $git branch -a:显示所有分支 26 $git branch -v:查看每个分支的最后一次提交 27 $git branch --merged:查看哪些分支已经合并到当前分支
 1 $git stash:把修改储藏在堆栈上,切换分支去做其他事
 2 $git stash pop:释放暂存
 3 $git stash -u:储藏未跟踪文件
 4 $git stash list:以列表形式查看储藏的信息
 5 $git stash apply:重新应用储藏的工作
 6 $git stash apply storeName:如果不指定储藏, git会默认是最近的储藏。
 7 $git stash drop storeName:从堆栈上移除暂存的信息
 8 $git stash --keep-index:不储藏暂存
 9 $git stash --all:移除每一样东西,并存放在栈中。
10 $git clean:去除冗余文件,清理工作目录。
11 $git clean -dxf:清除所有未跟踪文件,包括纳入ignored的文件。如果要保留ignored的文件修改,使用参数-df。
12 $git clean -d -n:演习告诉我们即将移除什么
13 $git clean -f -d:移除所有未跟踪的文件以及空的子目录
1 $git push origin master:将本地主分支推到远程主分支
2 $git push origin branchName:创建远程分支
3 $git push origin tagName:创建远程tag
4 $git push origin remoteBranchName : localBranchName:推送本地分支到远端服务器
5 $git push origin :remoteBranchName:删除远程分支
6 $git push origin --delete remoteBranchName:删除远程分支
7 $git push -u origin master:将本地主分支推到远程(如无远程分支,则创建,用于初始化远程仓库)
8 $git cherry-pick 提交id:挑拣提交。

六、Git中的submodule是干什么的?

Git 子模块功能允许你将一个Git仓库当作另外一个Git仓库的子目录,允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。Submodule是git自带的一个功能,允许将一个仓库挂到另一个仓库上,一个仓库可以有多个submodule,同一仓库的不同分支,submodule的状态可以不同。添加submodule,可以用$git submodule add repoUrl。克隆有submodule的仓库,可以用$git clone -- recursive repoUrl。

七、为什么要进行版本管理?

1、记录代码的每个版本,实现代码存储和备份,可以解决文件丢失和覆盖的问题;
2、多人协作场景下,可以保持自己的代码副本最新,可以解决共同编辑一个文件的冲突情况。

八、简述GIT与SVN的区别

1、Git的配置级别:Local,Global,System;
2、Git是分布式的SCM,Svn是集中式的;
3、Git每个历史版本存储完整的文件,Svn只存储文件差异;
4、Git可离线完成大部分操作,Svn则相反;
5、Git有更优雅的分支与合并实现;
6、Git有更强的撤销修改和修改版本历史的能力;
7、Git速度更快,效率更高。

九、了解Github

1、watch:表示关注,等作者更新的时候,你可以收到通知。
2、fork:表示参与,你可以把别人的项目克隆到自己名下,然后增加或修改项目内容,通过pull request,把增加或修改的内容和原项目合并。
3、star:表示收藏,方便以后查找。
4、git使用40个16进制字符的SHA-1Hash来唯一标识对象。

十、git生成ssh key,避免每次push都要输入账号密码

1、命令行方式

A、在git命令行中输入ssh-keygen -t rsa -C "your_email@example.com"
B、默认在ssh目录中生成id_rsa和id_rsa.pub两个文件。
C、输入信息环节可以略过,直接回车。
D、打开id_rsa.pub文件,里面的信息即为SSH key,将这些信息复制到GitHub的Add SSH key页面即可。

2、git gui方式

A、打开git gui -> help -> Show SSH KEY;
B、点击右上角Generate key,输入passphrase,也可以略过;
C、生成SSH Key,将这些信息复制到GitHub的Add SSH key页面即可。

3、粘贴sshkey

cat ~/.ssh/id_rsa.pub | pbcopy .

十一、一些问题

1、无法拉代码

更改hosts文件,比如127.0.0.1  www.xxx.com,无法拉取远程代码。这时,查看~/.ssh/known_hosts文件,并删除旧的记忆,即可。ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts里。

2、无法粘贴

要在git bash下完成复制,粘贴,需要在边框上右键 -> 属性 -> 选项 ->勾选【快速编辑模式】。

3、写长段commit信息

用git commit提交版本时没有加-m,会进入vim,如何写入提交说明然后退出?

输入i,进入insert输入模式,此时光标在最上面,输入提交说明;
esc,输入:, 光标跑到最下面;
wq,回车。

4、区分文件名大小写

因为mac windows 在不设置大小写敏感规则的时候默认大小写是不敏感,项目部署的机器是Linux的,而Linux是大小写敏感的。所以文件大小写引起部署失败的问题平时不易发现,本地调试的时候大部分时候并不会出错误,只有在项目部署的时候问题才会显示出来。

如果本地打包正常,没有报错,jenkins打包有问题,有可能是代码中地址大小写问题。windows和mac系统电脑对大小写不敏感,Linux系统对大小写敏感
git默认大小写不敏感,项目开发的电脑是mac或者windows,而项目部署的机器是Linux。

git config --global core.ignorecase false
# 删除不需要的大小写同名文件

git mv -f [你想要删掉的文件] [你想要留下的文件]
git mv -f A.js a.js

等同于:

git rm A.js
git add a.js

5、合并commit

// 减少绝大部分冲突
git pull --rebase

// 合并所有commit为一个commit
git reset --soft commit-hash 或者 git rebase -i commit-hash

6、更新测试环境代码(需要借助push的hook)

git checkout test2
git pull --rebase
git merge origin/develop
git merge yourBranch
git push
git checkout yourBranch

在开发分支写需求和解决bug,在测试分支解决冲突。

十二、clone with ssh 和 clone with https的区别

HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码;
SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。SSH 在push的时候,不需要输入用户名和密码,除非你做了设置。

十三、shell命令

source filename

这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
source(或点)命令通常用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile
是bash shell的内置命令。

十四、gitlab

gitlab显示的时间和实际提交的时间不同,差了8个小时,可能是gitlab服务器的时区没有设置,

posted @ 2022-03-10 10:07  威震天1  阅读(92)  评论(0编辑  收藏  举报