Git指南
这里所列举的通用配置无论是在Windows还是Linux,都要用到。
安装与配置
安装Git软件
Windows平台:Git for Windows(在安装的时候注意那些选项的设置)
Linux平台:sudo apt-get install git
基础配置
打开终端,在windows平台就用上一步安装上的git bash
1 | 全局配置,这里的用户名和邮箱填写你自己的帐号,可以是github上的帐号信息 |
Git相关文件
.gitkeep: 这个文件当前所在的空目录可以加入到版本控制里面去
Github的使用
打开公钥文件,然后复制其中的内容到Github上的setting->SSH keys->Add SSH key,如下
点击Add Key后会要求输入github密码,因为这是特别敏感的操作
然后进行新建仓库,无论是github还是其他托管网站都可以新建远程库,新建完成后都会提示你下一步该怎么做
按照上图给出 操作指南,有三种方法分别是
- 在本地建立一个新库,并新建一个README.md到远程库
- 直接将本地库的代码推送到远程库,不过在本地需要将文件夹编程一个库
- 从别的库导入代码到该库
具体的命令在途中均有给出
常用操作
日志/历史/版本
1 | GIT_CURL_VERBOSE=1 GIT_TRACE=1 git ... # 相当于debug,能看到git命令执行期间的状态 |
代码更改
1 | git blame filename # 查看某文件的改动历史 |
分支操作
分支命名规范:
- 功能(feature)分支:
feature-*
- 预发布(release)分支:
release-版本号
- 修补bug(fixbug)分支:
fixbug-*
1 | git fetch # 取回所有分支的更新 |
标签
1 | git tag # 查看当前所有的标签 |
其他功能
1 | 统计代码行数 |
贡献PR(Fork别人的项目)
如果希望给开源项目贡献代码或者直接修复bug,那么就需要涉及到fork了并提交了。步骤如下:
fork别人的仓库到自己这里: 直接在github里面点击fork,即可在自己的代码仓库里面创建一个一模一样的仓库。
从自己的代码仓库clone下来,并开发。
开发完成后,commit到自己的代码仓库
在自己的项目创建Pull Request,指向到原开源项目中去。
记得添加commit说明。
多人协作
参考文章:廖雪峰的官方网站
前提:已经在Github上创建了库并创建了一个新的分支,假设新分支名为dev,那么开发步骤如下:
抓取远程分支到本地
1
2
3
4
5git clone git@github.com:haoflynet/test.git
git branch # 查看当前分支
git checkout -b dev origin/dev # 将本地的dev分支对应远程的origin/dev分支并切换到该分支
git clone -b mybranch --single-branch git://sub.domain.com/repo.git # 直接拉取指定分支到本地在该分支下进行开发
修改完成后推送到远程dev分支
1
2
3git add .
git commit -m "some modification"
git push origin dev修改并合并到master分支
1
2
3git checkout master # 首先切换到本地的master分支
git merge --no-ff # 将本地的dev分支与本地的master分支合并
git pull # 获取远程索引这一步可能这一步可能会冲突,原因当然是其他人在你之前对远程的master分支进行了修改并提交上去
如果没有错,就直接推送
git push origin master
TroubleShooting
git checkout -b dev origin/dev出现错误fatal: cannot update paths and switch to branch ‘origin/dev’
原因是未在远程创建dev分支,或者未在本地更新分支信息git remote add origin git@github.com:haoflynet/test,出现错误fatal: remote origin already exists
原因是克隆别人的库下来修改后push到自己的库可能会出现这种错误,要先执行git remote rm origin.gitignore无效,该忽略的依然没有被忽略
1
2
3git rm -r --cached .
git add .
git commit -m "fixed untracked files这样会删除github上面已经提交了的但是现在忽略了的文件,如果要在github上面保留一份,那么执行
git add -f filename
There was a problem with the editor ‘vi’
vi编辑器的问题吧,直接换成vimgit config --global core.editor $(which vim)
更改文件名后,远程居然没有过更新
git默认对文件名的大小写不敏感,需要在仓库执行git config core.ignorecase false
让它对大小写敏感413 request entity too large
发生这个问题是因为采用的是https而不是ssh方式来push仓库,而https传输数据的大小一般是由服务器,即nginx来控制的,太大了是传不上去的,这时候只需要更改为ssh方式即可。
修改提交作者和邮箱: git可以通过
git filter-branch
修改已经提交了的commit的作者和邮箱。如果仅仅想修改一次的,可以直接git commit --amend --author="haoflynet <haoflynet@gmail.com>"
。这里有一个来自若有所思-胡磊的批量修改的脚本:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25!/bin/sh
git filter-branch --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [ "$GIT_COMMITTER_EMAIL" = "[Your Old Email]" ]
then
cn="[Your New Author Name]"
cm="[Your New Email]"
fi
if [ "$GIT_AUTHOR_EMAIL" = "[Your Old Email]" ]
then
an="[Your New Author Name]"
am="[Your New Email]"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'error: you need to resolve your current index first: 通常是因为合并冲突所致,可以简单地使用
git reset --merge
进行恢复在目录外面执行git参数,不进入目录提交git:
1
git --git-dir=~/foo/.git --work-tree=~/foo push
误删分支及恢复方法: 项目很久以后才发现以前某个被删除的分支还没合并到主分支,看不到修改了哪些地方了。
- 先用
git log -g
找到之前在该分支上面的commit
记录(所以必须要有经常commit
的习惯,可以不push
但是要commit
) - 从该commit处新建分支
git branch 新分支名 commit的hash值
- 切换到新分支
git checkout 新分支名
- 先用
两个人用同一个账号登录同一台服务器居然有一个人有git权限,另一个却没有: 这是因为虽然是同一个用户登录的服务器,但是所带的key确实不一样的,可以使用
ssh-add -l
查看你登录的ssh key
,看是否有权限。warning: refname ‘remotes/origin/dev’ is ambiguous. fatal: 歧义的对象名: ‘remotes/origin/dev’: 原因是错误的新建了一个和远程分支同名的分支,在新建分支的时候一定要
-b
让本地分支与远程分支相对应,遇到这种情况,只需要先删除本地分支即可git branch -d 分支名