Git 笔记
Git的一些命令笔记,包括安装、配置、下载、上传、查询、修改、常见错误。
安装
Windows
① 安装 Git for Windows
https://git-for-windows.github.io/
② 使用git客户端
Mac
① 用图形界面git安装工具安装
http://sourceforge.net/projects/git-osx-installer/
② 用homebrew安装
brew install git
Fedora
sudo yum install git-all
Debian & Ubuntu
sudo apt-get install git-all
源码编译安装
① 安装依赖工具
Fedora
sudo yum install dh-autoreconf curl-devel expat-devel gettext-devel \ openssl-devel perl-devel zlib-devel
Debian & Ubuntu
apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev
② 下载git源码
③ 编译安装
tar -zxf git-1.7.2.2.tar.gz
cd git-1.7.2.2
make prefix=/usr/local all
sudo make prefix=/usr/local install
配置
设置本地git用户名和邮箱
#用户名 git config --global user.name "huihut" #邮箱 git config --global user.email "huihut@outlook.com" #检查配置是否正确 git config --list
生成SSH key
ssh-keygen -t rsa -C "huihut@outlook.com"
需要确认一些信息,一般默认就行。
获取ssh key
#首先转换到git的默认的路径下,再cat cat .ssh/id_rsa.pub #输出如下 ssh-rsa AAAA....huihut@outlook.com
复制ssh-rsa…com到Github SSH keys上,如下图:
下载到本地仓库
用克隆命令(SSH or HTTPS)
git clone git@github.com:huihut/huihut.github.io.git
一般推荐使用SSH,因为HTTPS一般来说fetch
和push
代码都需要输入账号和密码,比较麻烦,而且速度较慢;但是在某些只开放HTTP端口的公司内部就无法使用SSH协议而只能用HTTPS。
上传到远程仓库
- 新建远程仓库,如:
huihut.github.io
终端进入本地仓库文件夹,如:
cd /Users/xx/code/Github/huihut.github.io
初始化仓库
git init
将本地的仓库和远程的仓库进行关联(SSH key )
git remote add origin git@github.com:huihut/huihut.github.io.git
新建文件或者修改文件
touch test.txt
添加新建或修改的文件到仓库
#添加特定文件 git add test.txt #添加此目录下全部文件 git add --all
将文件提交到仓库
git commit -m "add test.txt"
将本地仓库的内容推送到远程仓库
git push -u origin master
注意:第一次push
的时候最好加上-u
参数,这样git就会把本地master分支与远程的master分支关联起来,我们以后的push
操作就不再需要加上-u
参数了。
查询
查看工作区和版本库里面最新版本的区别
git diff HEAD -- readme.txt
查询状态
git status
修改
丢弃工作区的修改
git checkout -- readme.txt
删除文件
rm test.txt
删除文件夹(
-r
:向下递归;-f
:强制删除)rm -rf /Users/xx/test
常见错误:
error: failed to push some refs to ....
问题的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。
① 方法一:强推(-f
),视情况加-u
git push -f -u origin master
②方法二:先把git的东西fetch到你本地然后merge后再push
git fetch
git merge
这两句等价于
git pull
可是,这时候又出现了如下的问题:
上面出现的 [branch “master”]是需要明确(.git/config)如下的内容
[branch "master"]
remote = origin
merge = refs/heads/master
这等于告诉git2件事:
1,当你处于master branch, 默认的remote就是origin。
2,当你在master branch上使用git pull时,没有指定remote和branch,那么git就会采用默认的remote(也就是origin)来merge在master branch上所有的改变
如果不想或者不会编辑config文件的话,可以在bush上输入如下命令行:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
之后再重新git pull下
git pull
最后git push你的代码(视情况加-u
)
git push -u origin master
参考资料
YotrolZ的博客 . 本地Git仓库和远程仓库的创建及关联