- 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参数说明
本地配置:将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的文件