git学习笔记

前言

以前使用SVN,切换到分布式版本控制系统Git,此笔记记录一下学习心得,备询。git命令大全,贴个链接,比较适合初次接触者动画演示Git命令

git配置代理

天朝特色,使用git clone下载同性交友网站(github)的仓库时,巨慢!如果可以科学上网的话,设置一下代理,加一下速…
本文用的trojan科学上网,利用它的socks5代理加速。配置命令:

1
2
git config --global http.proxy 'socks5://127.0.0.1:1080' 
git config --global https.proxy 'socks5://127.0.0.1:1080'

取消代理的命令:

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

git提交到多个remote

本地生成博客页面,git部署到VPS远端,也顺便也部署到github。下面就通过把本地的文件提交到两个git远端(Remote)的事例,了解git命令的使用。
切换到指定目录(以目录hexo下的.deploy_git文件夹为例)

1
2
3
4
5
6
7
8
git init        //初始化一个git的本地仓库(以前hexo deploy的时候已经有了本地仓库,配置信息在隐藏文件夹.git里)
git add myfile. //将myfile加入暂存区index(
git commit -m “first commit” //把暂存区的文件提交到本地仓库
git remote add Name1 git@vps的IP:hexo.git //增加一个新的远程仓库,并命名为Name1
git push -u Name1 master //把分支master的内容push到远程仓库
git remote add Name2 git@github.com:yourname/yourname.github.io.git
//添加第二个远程仓库,并命名为Name2
git push -u Name2 master //将分支master的内容push到第二个远程仓库

至此,就将本地文件提交到两个远端仓库了。
ps:由于我的github的yourname.github.io仓库里已经有了文件,所以push的时候会报错:

1
2
3
4
5
6
error: failed to push some refs to 'git@github.com:yourname/yourname.github.io.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

解决方法:
$ git push -f Name2 master

git pull冲突

从github上fork了一个项目,并clone到本地,做了一些删改后,想要提交到github个人仓库,但发现作者项目更新了,便把fork来的项目通过New pull request和原项目同步更新了。这时本地在用git pull更新项目时,遇到了下面的问题:

1
2
3
error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx 
Please, commit your changes or stash them before you can merge.
Aborting

解决方法两种:

覆盖本地修改

1
2
git reset --hard
git pull

这种会放弃本地修改的代码,看情况使用。

使用git stash

这种会保留自己本地修改

1
2
3
git stash
git pull
git stash pop

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

最后就可以diff一下文件看看自动合并的情况,并对解决冲突文件做相应修改后提交即可。