git 基本使用
仓库操作
github 创建仓库
添加一个文件,文件名叫:README.md 命令:touch README.md
使用当前目录作为Git仓库,我们只需使它初始化。
初始化本地仓库 git init
下载Git的库 git clone 远程仓库地址
本地仓库关联远程仓库
git remote add origin 远程仓库地址
查看当前关联的远程主机地址
git remote -v
Git如何切换远程仓库地址,有三种办法:
一、修改命令
git remote set-url origin url
二、先删后加
git remote rm origin
git remote add origin git@github.com:sheng/demo.git
三、修改config文件
如果你的项目有加入版本控制,那可以到项目根目录下,查看隐藏文件夹, 发现.git文件夹,找到其中的config文件,就可以修改其中的git remote origin地址了。
git rm -r 文件名
git commit -m "删除a目录下的2.txt文件"
git push
note: 用-r参数删除目录, git rm --cached a.txt 删除的是本地仓库中的文件,且本地工作区的文件会保留且不再与远程仓库发生跟踪关系,如果本地仓库中的文件也要删除则用git rm a.txt
本地文件提交到远程
$ git init //本地初始化git目录 $ git status // 查看当前状态 $ git add README // 开始跟踪一个文件,并处于暂存状态 $ git commit -m [message] //将暂存区内容添加到本地仓库中, -m 为备注信息 ; -a 参数设置修改文件后不需要执行 git add 命令,直接提交 ; 也可直接用 -am [message] 直接跳过添加文件 // 添加远程仓库 $ git remote add origin https://gitee.com/jianan/learnGit.git // 本地仓库关联远程仓库 $ git branch –set-upstream-to=origin/master master $ git push <远程主机名> <本地分支名>:<远程分支名> // 用于从将本地的分支版本上传到远程并合并 ------------------------------------------------ //如果本地分支名与远程分支名相同,则可以省略冒号: $git push <远程主机名> <本地分支名> //如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数: $git push --force origin master //删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支: $git push origin --delete master
基本配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用git config
时用--system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件。- 当前项目的 Git 目录中的配置文件(也就是工作目录中的
.git/config
文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量。
在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER。
此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
查看配置
git config user.name //查看用户名 git config user.password //查看密码 git config user.email //查看邮箱
配置域
git config --local 只对某个仓库有效 git config --global 对当前用户的所有仓库有效 git config --system 对系统所有登录的用户有效
配置个人的用户名称和电子邮件地址:
$ git config --global user.name "runoob" $ git config --global user.email test@runoob.com
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
获取所有可用配置变量的列表
git help --config
查看当前所有的config的配置,加 --list
git config --list --local git config --list --global git config --list --system
SSH key 生成步骤
ssh-keygen -t rsa -C 注册是的邮箱
密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。
同时在密钥中有一个注释字段,用-C来指定所指定的注释,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。所以在这里输入自己的邮箱或者其他都行。
也可以添加 -f filename 指定密钥文件名,生成 filename__rsa 和 filename_rsa.pub 2个文件,没有 -f 参数默认生成 id_rsa 和 id_rsa.pub 2个文件。
基本使用参数
-
-t
用来指定密钥类型(dsa | ecdsa | ed25519 | rsa | rsa1
); -
-P
用来指定密语 -
-f
用来指定生成的密钥文件名 -
-C
用来添加注释
输入完毕后程序同时要求输入一个密语字符串(passphrase),空表示没有密语。接着会让输入2次口令(password),空表示没有口令。3次回车即可完成当前步骤,此时[c盘>用户>自己的用户名>.ssh]目录下已经生成好了。
添加到远程:登录github,打开setting->Deploy keys,点击右上角 Add deploy key,把生成好的公钥id_rsa.pub放进 key输入框中,再为当前的key起一个title来区分每个key
测试 添加 验证: ssh -T git@github.com
相关配置说明: ssh-keygen参数说明
本地配置:将SSH私钥添加到 ssh-agent
ssh-agent是管理多个ssh key的代理,受管理的私钥通过ssh-add来添加。
假如我们手头有三台server:host1、host2、host3且每台server上到保存了本机(supersun.biz)的公钥,因此我可以通过公钥认证登录到每台主机;
但是这三台server之间并没有并没有保存彼此的公钥,而且我也不可能将自己的私钥存放到server上(不安全),因此彼此之间没有公钥进行认证(可以密码认证,但是这样慢,经常输密码,烦且密码太多容易忘)。但是如果我们启用ssh-agent,问题就可以迎刃而解了。
在后台启动 ssh-agent :$eval `ssh-agent -s` 注意这里是反引号
将SSH私钥添加到 ssh-agent :ssh-add
编缉/etc/ssh/ssh_config文件:ForwardAgent yes
让ssh-agent能转发,这样就可以这样登陆了:supersun.biz---->host1---->host2,到此请注意,如果host1上没有设定转发的话就登不了host3了,设定了转发后可以进一步跳到rs3上了。
如运行ssh-add,遇到“Could not open a connection to your authentication agent.”。
解决:需要ssh-agent启动bash,或者说把bash挂到ssh-agent下面。
远程操作
查看远程仓库地址
git remote -v
查看指定远程仓库地址
git remote warehouse_name
添加新的仓库地址
git remote add origin https://github.com/xue-y/email.git
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
git push -u origin master
添加远程github仓库的时候提示错误:fatal: remote origin already exists.
最后找到解决办法如下: # 原因是你已经在远程创建了仓库
1、先删除远程 Git 仓库
git remote rm origin
2、再添加远程 Git 仓库
git remote add origin git@github.com:FBing/java-code-generator
查看操作记录
git log -p “file name”
跟踪查看某个文件的历史修改记录
git log -3 --graph --stat
查看历史修改的关系
git log --stat
git blame filename
查看文件的每一句是谁的修改
回退撤销操作
添加文件(add 文件)暂存区撤销
git reset HEAD <file>
提交本地仓库后忘记了暂存某些需要的修改
$ git commit -m 'initial commit' // 这步操作后忘记了添加的文件 $ git add forgotten_file $ git commit --amend
撤消对文件的修改,将它还原成上次提交(远程仓库)时的样子
git checkout -- <file>
Git fetch和git pull的区别
1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
Git fetch origin master
git merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:test
git diff tmp
git merge tmp
从远程获取最新的版本到本地的test分支上,默认当前分支,之后再进行比较合并
2. git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
如果git远程修改某个文件,使用上述命令本地无法更新
git fetch --all //只是下载代码到本地,不进行合并操作
Git fetch 仓库名 分支名:本地分支名
git reset --hard origin/需要更新的本地分支名 //把HEAD指向最新下载的版本