git 基本使用

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

-----------------------------------------------------------------------------------------------------------------------------------------------------------

本地操作

github 创建本地仓库

添加一个文件,文件名叫:README.md 命令:touch README.md

使用当前目录作为Git仓库,我们只需使它初始化。

git init //初始化本地仓库

本地仓库关联远程仓库

git remote add origin 远程仓库地址

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 --cached a/2.txt //删除a目录下的2.txt文件   删除a目录git rm -r --cached a

git commit -m "删除a目录下的2.txt文件" 

git push

note:  用-r参数删除目录, git rm --cached a.txt 删除的是本地仓库中的文件,且本地工作区的文件会保留且不再与远程仓库发生跟踪关系,如果本地仓库中的文件也要删除则用git rm a.txt

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下面。

ssh-agent bash --login -i
ssh-add

 

远程操作

查看远程仓库地址

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
查看文件的每一句是谁的修改

 

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指向最新下载的版本

如果合并时(git pull | git merge)

warning: LF will be replaced by CRLF in ……
解决方法:
git config --global core.autocrlf false
就可以解决了。
原因就是:
原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题

创建分支时fatal: Not a valid object name: 'master'.

原因:本地还没有创建master
解决方案:添加一个文件提交即可

处理 :untracked files

1. # 删除 untracked files

git rm -r --cache 文件名 
#撤销添加到暂存区里的文件

git rm -f 文件名 #删除暂存区和工作区的文件

git clean -f  #删除文件

# 连 untracked 的目录也一起删掉
git clean -fd

# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd

# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

2 .#版本回退

git reset --hard HEAD # 回退上一个版本
git reset --hard 3628164 # 回退到指定版本 使用 git log 查看版本库

 3. #添加 git 忽略文件

在仓库目录下新建一个名为.gitignore的文件

原文地址:https://www.cnblogs.com/xuey/p/7447835.html