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删除远程仓库的文件或目录

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参数说明

   git生成ssh key及本地解决多个ssh key的问题

   创建SSH密钥,并连接GitHub

 

本地配置:将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指向最新下载的版本

 

posted @ 2017-09-05 09:23  柔和的天空  阅读(237)  评论(0编辑  收藏  举报