Git命令整理
Git命令整理
1. 配置全局用户和邮箱/生成公钥
a 配置全局用户
git config --golabl user.name “Your Name"
b 配置全局邮箱
git config --global user.email “Your Name”
c 查看配置
git config –list
d 查看全局配置
git config – global –list
e 生成公钥
ssh-keygen –t rsa –C ‘注释’
f 查看公钥
公钥存放的默认相对路径为 .ssh文件夹下的id_rsa.pub 文件
linux : cat ~/.ssh/id_rsa.pub
windows : C:\Users\user\.ssh\id_rsa.pub
2. Git 仓库
注: url地址形式为:https://gitee.com/xxx/xxx.git 或者 git@gitee.com:xxx/xxx.git
a 克隆仓库 :
git clone url
Git服务器已配置好本机公钥,或者本机已使用用户名密码登录Git,可使用此命令直接克隆。如果没有,可使用以下命令克隆 : git clone http://user:pwd@url
(使用用户名和密码)
b 初始化本地仓库 git init
c 关联远端仓库
- 添加远端仓库
git remote add origin url
- 拉取远端仓库代码
git pull origin master(git pull <remote> <branchname> )
- 查看当前远端仓库
git remote -v
- 修改远端仓库地址
git remote set-url origin <remote-url>
- 删除远端仓库
git remote rm origin
d 查看当前仓库状态 git status
3. 分支
a 创建分支
git branch <branchname>
推送到远端 git push origin <branchname>
有可能没有远端库创建分支的权限,导致推送失败,报403错误
b 查看分支
git branch
查看本地和远程分支
git branch -a
c 切换分支
git checkout <branchname>
创建并切换分支 git checkout -b <branchname>
d 合并分支
git merge <branchname>
合并指定分支到当前分支
e 拉取远端仓库指定分支代码到当前分支
git pull <remote> <branchname>
远端仓库的默认名称为 origin,默认分支为master :git pull origin master
f 删除本地分支
git branch -d <branchname>
推送到远端,删除远端分支 git push origin :<branchname>
g 删除远端分支
git push origin -d <branchname>
注意:此命令只删除远端仓库的分支,本地仍然存在
4. Tag
a 创建tag
git tag -a <tagname> -m '注释'
推送到远端仓库 git push origin <tagname>
推送所有本地标签到远端仓库 git push origin --tags
b 追加创建tag到指定提交
git tag -a <tagname> -m'注释' <cimmitID>
tagname :tag名称
cimmitID:提交记录id,可截取一部分,只要保证唯一性即可,一般可取前7位。
c 显示本地tag列表 git tag
模糊搜索本地tag列表 git tag -l <tagname>
搜索 1.4.2 系列的标签
$ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4
d 显示远端tag列表
git ls-remote -t 或 git ls-remote --tags
$ git ls-remote -t
From https://github.com/master-dev.git
6651fdd202db5b6635189889ad64c0f704b689f9 refs/tags/V1.6.10
186de87fc31f5e27e9b8da19c0ea164fef8cc16a refs/tags/V1.6.10^{}
ee58f63083ac42bfba815cecb618270d64450d7d refs/tags/V1.6_6.2
249d342aa594540ceee2965ad95eab25b480d88b refs/tags/V1.6_6.2^{}
e 获取远端仓库中的引用
` git ls-remote [--heads] [--tags] [--refs] -h --heads -t --tags `
$ git ls-remote
From https://github.com/master-dev.git
b12cc667a3ff7a0e4f2842966a1435e173b1cac2 HEAD
b12cc667a3ff7a0e4f2842966a1435e173b1cac2 refs/heads/master
620e689691e00ab5931dabf1dee0e03c76d435ae refs/hidden/Tag-tag-cb-backup ea9673c8d24e7f2fc185087c6035835a929d78d3 refs/hidden/Tag-tag-cb-backup^{}
d5a4304aea3d386de8153d48b12a77676649e33f refs/remotes/cb-last-merged-abc-master/master
16cb58856c0c1dfd46631dfdefeb70ab3882c34d refs/tags/V1.6_6.3
24ad37f1205ef18dc7014d4478557c4a99b3e3eb refs/tags/V1.6_6.3^{}
e68f74c570e0b47a337566d29281ff4e93180cf5 refs/tags/V1.6_6.4_9
69fad4aa1fa5413a6c5e040033a62f1de0a678b1 refs/tags/V1.6_6.4_9^{}
HEAD : 表示远端仓库中当前的指针
refs/heads/:表示远端仓库中当前指针指向的分支
refs/hidden/:表示远端库中已删除或隐藏的 branch、tag、fork
refs/remotes/:表示远端仓库中的 branch、fork
refs/tags/:表示远端仓库中的 tag
$ git ls-remote --refs
From https://github.com/master-dev.git
b12cc667a3ff7a0e4f2842966a1435e173b1cac2 refs/heads/master
620e689691e00ab5931dabf1dee0e03c76d435ae refs/hidden/Tag-tag-cb-backup
d5a4304aea3d386de8153d48b12a77676649e33f refs/remotes/cb-last-merged-abc-master/master
16cb58856c0c1dfd46631dfdefeb70ab3882c34d refs/tags/V1.6_6.3
e68f74c570e0b47a337566d29281ff4e93180cf5 refs/tags/V1.6_6.4
对比两个命令可以看出:$ git ls-remote --refs 命令返回信息中剥离了 Head ,tag剥离了重复的信息
f 显示单个 tag 信息
git show <tagname>
g 验证 tag
git tag -v <tagname>
h 删除本地 tag
git tag -d <tagname>
i 删除远程仓库中指定 tag
git push origin :refs/tags/<tagname>
或 git push origin -d <tagname> (同删除远端分支命令相同)
注意:以上命令只删除远端仓库的 tag,本地仓库仍然存在
5. File
注意:git 的版本控制管理针对的是文件,不针对文件夹,因此 git 不允许提交一个空的目录到版本库上。
windows 系统的文件名称大小写不敏感,但 git 的文件名称大小写敏感。当 git 仓库在 windows 系统上 ,如果只修改文件名的大小写,git 中可检查出文件名称进行了修改且可提交并push,但实际的文件名称并未修改,因此修改后的文件名也并不能同步到远端仓库。只能先修改为其他名称,提交并push,之后再改成正确的名称,提交并push,本次修改才算成功。
a git add
有新增文件时,需要使用此命令,将新增文件登记到 index 区,纳入 git 管理。已经登记的文件,此命令则会将文件的修改或删除添加至 index 区。对于已经登记的文件,也可直接使用 commit ,add不是必须的。
-
git add <filename>
将文件的变化添加至 index 区(新增、修改、删除) -
git add -A
将当前路径下所有文件的变化添加至暂存区 -
git add -u
将当前路径下所有修改(modified)和删除(deleted)文件,不包括新文件(new)添加至暂存区 -
git add .
将当前路径下所有新文件(new)和修改(modified)文件,不包括被删除(deleted)文件添加至暂存区
b git commit
将 index 区内容添加到本地仓库
-
git commit -m '备注信息'
将 index 区内容添加到本地仓库 -
git commit -a -m '备注信息'
修改和删除的文件不需要执行 git add 命令,直接提交 -
git commit [file1] [file2] ... -m [message]
将 index 区的指定文件提交当本地仓库
c git push
将本地分支的更新推送到远端仓库
-
git push <remote> <branchname>
将本地的 branchname 分支推送到 remote 主机的 branchname 分支,如果 branchname 不存在,则会被新建。一般实际执行的命令为:git push origin master
-
git push <remote> :<branchname>
删除指定的远端分支。例:
git push origin :master
等同于git push origin --delete master
注意:branch 的推送、删除操作与 tag 的推送删除操作类似
-
git push origin
将当前分支推送到 origin 主机的对应分支。当前分支与远程分支存在追踪关系,可忽略本地分支和远程分支,使用此命令 -
git push
当前分支只有一个追踪分支时,主机名都可省略,使用此命令注意:如果当前分支与多个主机存在追踪关系,则要先执行以下命令:
git push -u origin master
,指定默认主机,然后才可不带任何参数使用git push
命令
e git log
获取提交记录,按时间倒序
注意:log 信息较多时,窗口显示不全,按下箭头或 Enter 键可往下查看 ,按 Q 键结束当前命令(或 CTRL + C 中断当前进程)
git log -5
显示前 5 条提交,可以指定任意条数git log --skip=5
跳过前 5 条提交git log -p
提交中增加文件差异对比信息(diff)git log --oneline 显示简化信息/--stat 显示统计信息/--author 按用户过滤/--after 指定日期之后/ --before 指定日期之前/--merges 显示merge/--no-merges 不显示merge
f git show
用于显示各种类型的对象
git show <commitId>
显示指定提交的详细信息git show <tagname>
显示指定 tag 的详细信息git show <branch>
显示指定分支的详细信息
6. git pull = git fecth + git merge
-
git pull
命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。 -
更准确地说,
git pull
使用给定的参数运行git fetch
,并调用git merge
将检索到的分支头合并到当前分支中。 使用--rebase
,它运行git rebase
而不是git merge
。 -
完整格式:
git pull <远程主机名> <远程分支名>:<本地分支名>
例:
git pull origin next:master
拉取origin
主机的next
分支,与本地的master
分支合并 -
git pull origin
如果当前分支与远程分支存在追踪关系,可省略分支名,使用此命令 -
git pull
如果当前分支有唯一追踪分支,连远程主机名都可以省略,使用此命令
a git fetch和git pull的区别
-
git fetch:相当于是从远程获取最新版本到本地,不会自动合并。
$ git fetch origin master
$ git log -p master..origin/master
$ git merge origin/master
以上命令的含义:
- 首先从远程的
origin
的master
主分支下载最新的版本到origin/master
分支上 - 然后比较本地的
master
分支和origin/master
分支的差别 - 最后进行合并
注意: 在实际使用中,git fetch
更安全一些,因为在merge
前,我们可以查看更新情况,然后再决定是否合并。
b 解决冲突 conflict
1、 git commit -> git push 失败,发生冲突
2、 git pull 拉取远程代码,打开冲突文件,手动合并冲突代码。(<<<< >>>>> 表示冲突所在的位置,<<<<Head 与 ==== 之间表示本地的修改,==== 与 >>>>>afigkg556465 之间表示远程的修改,须手动合并)
3、 git add -u 把所有以 track 的文件的新的修改加入 index 区,但不加入新的文件
4、 git merge/rebase --continue 继续合并/变基,有冲突继续解决,重复以上步骤,直至合并/变基完成。
5、 git commit -> git push 成功!