git常用命令
文章目录
账号配置
-
MAC配置全局的git账户
查看所有账户信息
git config --list查看当前全局的git账户信息
git config user.name git config user.email添加/覆盖全局git用户名和邮箱
git config --global user.name "用户名" git config --global user.email "邮箱"删除全局的git用户名和邮箱
git config --global --unset user.name "用户名" git config --global --unset user.email "邮箱" -
Mac配置git SSH公私钥
查看本地ssh目录是否有公私钥
cd ~/.ssh如果有删除,没有执行下命令创建
ssh-keygen -t rsa -C “邮箱账号” //一路回车即可生成 id_rsa 、id_rsa.pub将id_rsa.pub 公钥拷贝至服务器的ssh中即可
cat id_rsa.pub
文件管理
-
查看当前分支本地文件状态
git status -
查看当前分支本地修改文件具体信息
查看所有修改明细
git diff HEAD查看具体文件修改明细( 例如:查看readme.txt修改内容)
git diff readme.txt -
修改文件后推送到远端
查看修改的文件
git status查看修改文件具体内容
git diff xxxx将xxx文件添加到缓存区
git add xxxx提交到本地库并添加提交说明,也可以不需要说明直接 git commit
git commit -m “提交说明”提交到远程master分支
git push origin master查看git提交日志
git log回退
// 回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可; git reset --soft 需要回退的提交的id // 彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉; git reset --hard 需要回退的提交的id
分支管理
-
查看本地分支
git branch -
查看远程分支
git branch -r -
查看所有分支(本地&远程)
git branch -a -
创建本地分支
git branch dev //dev 是分支名,可自定义 -
切换本地分支
git checkout dev //dev 是要切换目标分支名称 -
将本地分支push到远程(要切换到推送的目标分支上)
git push origin dev //dev 是要推送要远程的本地分支名称 -
删除本地分支
git branch -D dev //dev 是要删除的本地分支名称
命令行指引
Git 全局设置
git config --global user.name "username"
git config --global user.email "email"
git clone
程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。
$ git clone <版本库的网址>
该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
$ git clone <版本库的网址> <本地目录名>
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。
$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/
SSH协议还有另一种写法。
$ git clone [user@]example.com:path/to/repo.git/
$ git clone git@github.com:jquery/jquery.git
通常来说,Git协议下载速度最快,SSH协议用于需要用户认证的场合。各种协议优劣的详细讨论请参考官方文档。
git remote
为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。
不带选项的时候,git remote命令列出所有远程主机。
$ git remote
origin
使用-v选项,可以参看远程主机的网址。
$ git remote -v
origin git@github.com:jquery/jquery.git (fetch)
origin git@github.com:jquery/jquery.git (push)
上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。
克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
$ git clone -o jQuery https://github.com/jquery/jquery.git
$ git remote
jQuery
上面命令表示,克隆的时候,指定远程主机叫做jQuery。
git remote show命令加上主机名,可以查看该主机的详细信息。
$ git remote show <主机名>
$ git remote show origin
git remote add命令用于添加远程主机。
$ git remote add <主机名> <网址>
$ git remote add origin git@github.com:jquery/jquery.git
git remote rm命令用于删除远程主机。
$ git remote rm <主机名>
$ git remote rm origin
git remote rename命令用于远程主机的改名。
$ git remote rename <原主机名> <新主机名>
$ git remote rename origin old-origin
远程创建一个新仓库,克隆到本地
-
在gitlab上新建一个项目然后在本地clone下来,
-
进入项目添加文件通过
git add命令,将文件关联到git;git add file.txt添加指定文件到gitgit add .添加所有文件到git -
通过
git commit命令提交关联到git到文件; -
通过
git push命令将提交的文件推送到远程git仓库指定分支
git clone ssh://git@gitlab.xxxx.xxx:port/username/projectname.git
cd projectname
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
将本地现存项目推送到到远程仓库
- 进入本地现有项目文件夹
- 执行
git ini初始化git命令 - 给当前项目添加远程仓库主机名称和地址
git remote add <主机名> <地址> - 执行
git add .命令将文件添加到git - 执行
git commit命令将文件的文件提交到git - 执行
git push命令将提交到文件推送到远程仓库
cd existing_folder
git init
git remote add origin ssh://git@gitlab.xxxx.xxx:port/username/projectname.git
git add .
git commit -m "Initial commit"
git push -u origin master
将本地已有的Git仓库项目推送到一个新的地址(或者说更改现有的git仓库远程地址)
- 进入本地已有git仓库项目
- 重命名当前项目远程仓库的主机名称
git remote rename <原主机名> <新主机名> - 重新设置当前项目的远程仓库主机名和地址
git remote add <主机名> <地址> - 将当前项目全部文件推送到新仓库
git push -u <当前项目远程主机名> --all - 将当前项目的标签推送到新仓库
git push -u <当前项目远程主机名> --tags
cd existing_repo
git remote rename origin old-origin
git remote add origin ssh://git@gitlab.xxxx.xxx:port/username/projectname.git
git push -u origin --all
git push -u origin --tags
git地址迁移
-
查看当前仓库地址
git remote show origin -
更改项目git地址(迁移)
-
方式一
通过set-url origin 指定远程仓库地址
git remote set-url origin [新地址] -
方式二(会产生两个远程分支old-origin和origin)
1、重命名当前远程分支;2、添加当前远程分支的新地址
//重命名当前远程分支为 old-origin git remote rename origin old-origin git remote add origin [新地址]
-
一台主机配置可访问多个github仓库地址
在常规开发中,我们的一台设备(主机),一般会设置一个github仓库地址。如果主机需要访问多个github仓库地址,需要将我们的ssh key添加到对应的github仓库的SSH keys菜单中,遗憾的是对于同一个ssh key, github不支持添加到多个仓库中,否则会有如下提示:
Key is already in use

出现上述提示,则说明我们的ssh key已经被其他github仓库使用了,无法将其添加到该仓库。为了解决一台主机能够同时访问多个github仓库,这里我们需要在~/.ssh/(mac环境)目录下,配置config文件。
-
创建不同仓库的ssh key密钥对
参考上面Mac配置git SSH公私钥(我这里创建了两个github仓库的密钥对)
-
仓库1 ssh key密钥对
- 私钥:
repositry1_id_rsa - 公钥:
repositry1_id_rsa.pub
- 私钥:
-
仓库2 ssh key密钥对
-
私钥:
repositry2_id_rsa -
公钥:
repositry2_id_rsa.pub
-
-
-
配置github仓库ssh key
将两个仓库的公钥配置到对应的github仓库的ssh key内

-
配置config文件(如果没有则创建一个
touch config)将两个仓库的私钥配置到config内

-
测试连接
终端通过ssh -T git@{Host} 命令测试配置是否成功,Host是我们config内配置的Host别名
ssh -T git@repository1 ssh -T git@repository2如果出现如下提示,则说明我们配置成功
Hi XXXX! You've successfully authenticated, but GitHub does not provide shell access. -
拉取项目
注意:
-
github上通过ssh 命令clone项目 ,标准的项目的ssh命令格式一般为
git@github.com:拥有者/项目名称.git,例如:git@github.com:zcmain/Project1.git,当我们通过config配置好github仓库访问之后,我们需要更改clone的命令了,将标准的
git@github.com替换为我们config内配置的具体仓库的Host别名.
例如,我需要clone两个仓库的标准ssh 命令为:
# 仓库1的Project1项目的ssh命令 git@github.com:zcmain/Project1.git # 仓库2的Project2项目的ssh命令 git@github.com:tomato/Project2.git通过我们上述config文件配置好的不同仓库Host来clone两个项目具体命令如下
# clone github仓库1的Project1.git项目 $ git clone git@repository1:zcmain/Project1.git # 这里指定了Host为repository1,拥有者为zcmain(github账号) # clone github仓库2的Project2.git项目 $ git clone git@repository2:tomato/Project2.git # 这里指定了Host为repository2,拥有者为tomato(github账号)执行上述命令后,最终两个仓库项目都clone成功
Cloning into 'Project1'... remote: Enumerating objects: 2906, done. remote: Total 2906 (delta 0), reused 0 (delta 0), pack-reused 2906 Receiving objects: 100% (2906/2906), 1.52 MiB | 222.00 KiB/s, done. Resolving deltas: 100% (955/955), done. Cloning into 'Project2'... remote: Enumerating objects: 2105, done. remote: Total 2105 (delta 0), reused 0 (delta 0), pack-reused 2105 Receiving objects: 100% (2105/2105), 1.48 MiB | 195.00 KiB/s, done. Resolving deltas: 100% (488/488), done. -
git 给远程库 添加多个url地址
原文地址
一般来说,我们为git增加远程库,一般都是
git remote add origin <url>
但是你可能想要把你的本地的git库,既push到github上,又push到开源中国Git@OSC上,怎么解决呢 ?有人可能会用两个甚至多个远程库,即再添加一个远程库
git remote add origin2;
这个方法很低效,因为你要git push 两次才能完成push到两个库。其实还有一个方法,git的一个远程库 可以对应多个地址,让远程库origin拥有多个url地址。 方法如下:
首先,我们从零开始, 假设你现在想要增加3个远程库地址,分别为 :
// url 1
https://git.oschina.net/shede333/swioslibary.git
// url 2
https://git.oschina.net/shede333/swscrollbar.git
// url 3
https://github.com/shede333/CoreAnimationTestSW.git
首先,先增加第一个地址 (add)
git remote add origin <url1>
然后增加第二个地址(set-url)
git remote set-url --add origin <url2>
增加第三个地址(set-url)
git remote set-url --add origin <url3>
…依次类推
这样就完成了添加多个地址到origin库中了, 以后只要使用git push origin master 就可以一次性push到3各库的master分支里面了(使用git push也可以推动到当前默认分支)。
原理解析:
git remote set-url --add origin 就是往当前git项目的config文件里增加一行记录。
config文件打开方式有两种:
- 使用命令
git config -e- 在当前git项目的根目录下,文件位于
.git/config(.git目录为隐藏文件)
你每执行一次git remote set-url --add origin 就会增加一行,如下图:
git remote -v显示当前所有远程库的详细信息,显示格式为 远程库名字 url连接(类型)

所以说,你直接在config里面直接添加url来修改也是可以的,不必去执行git命令。
注意
使用git push origin master时,你可以push到origin的多个url地址,
但是使用 git pull时,只能拉取origin里的一个url地址(即fetch-url,如上图),这个fetch-url默认为 你添加的到origin的第一个地址,
如果你想更改,只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个url连接。
常见错误及解决方案
Git在push推送时,报错提示信息如下:
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
是由于本地和远程仓库两者代码文件不同步,因此需要先pull,进行合并然后再进行push
解决方案
- 先使用pull命令:
git pull --rebase origin master - 再使用push命令:
git push -u origin master
2945

被折叠的 条评论
为什么被折叠?



