使用Git工作
How to use git

Git不仅仅是可以用来备份代码,可以管理你的文档文件。不仅仅可以非要用来和远程仓库对应起来,只在本地建立git仓库,同样有助于包含自己文件的版本。

准备工作

配置用户名和邮箱

$ git config --global user.name "yourname"
$ git config --global user.email "youremail@email.com"

上面这样设置的是全局的用户角色,其配置文件写在~/.gitconfig里面。

如果你既用github,又用公司的git,就不可以设置global的账户名和邮箱了,不加global,在repro之内配置,就可以把用户配置保存在repro的.ssh/config文件中。

生成和配置ssh key

git的client-server链接过程支持https和ssh两种方式,而后者无需你每次输入账户和密码,所以方便一点。它的配置和ssh链接的信任关系配置的配置一模一样。

$ ssh-keygen -t rsa -b 4096  -f ~/.ssh/github  -C "youremail@email.com"
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/github
$ ssh-add -l

然后将生成的~/.ssh/github.pub公钥添加到github主页的配置中去。

如果要登录不同的git站点,自然需要配置多个key,这时需要添加~/.ssh/config来保存不同的key对应不同的站点。

Host oneid
	HostName github.com
	IdentityFile ~/.ssh/github

在本地创建项目

如果是一个自己创建一个新项目,在本地目录初始化

$ git init

如果是将远程的项目下载到本地,

$ git clone git@github.com:lucky521/reproname.git

基本工作流程

下面是一般的工作流程。

切换分支

$ git branch -a
$ git checkout another-branch

写完或者修改完代码,把有变动的文件加入到临时提交区

$ git add filename

将临时提交区的变动提交到本地仓库

$ git commit -m "description"

拉取远程最新版本,和本地的最新改动merge

$ git pull --rebase

这里推荐rebase方式的pull,这样尽可能的减少merge change的出现。

将本地仓库提交到远程仓库去

只有这一步才会对服务器仓库有所改动。

$ git push origin remote-branch-name

常用的需求

显示commit的历史记录

$ git log

显示某个commit的具体修改内容

$ git show commit-hash-id

查看当前本地的状态

$ git status

创建一个新分支

$ git checkout -b new-branch-name

这时本地的文件不会有变化,只是本地文件所对应的分支名变了。修改完代码再push到远程新分支就可以在远程创建新的分支。

$ git push -u origin new-branch-name

修改最近的commit的变动

已经提交过一次本地的commit,还没push到远程,又有改动的地方,想更新这一次commit。

$ git commit --amend

修改了代码,想恢复回去

修改了代码,还没有commit,想恢复回之前的未修改版本。(修改的部分不想要了)

$ git reset --hard

已经commit,想撤销回去

已经commit到本地仓库,但还没有push到远程仓库,想撤销这一次本地的commit。(修改的地方还要)

$ git reset --soft HEAD~1

已经commit到本地仓库,但还没有push到远程仓库,想撤销这一次本地的commit。(修改的地方不要了)

$ git reset --hard HEAD~1

将本地代码同步到某一次commit时的版本

$ git checkout commit-hash-id

手工给代码打tag(需要权限才可以)

rank全量代码,dev分支
git pull --rebase
git tag -a 201808241124rank -m 'manual as no staging' 1a23cd62fb9a8618f06674092e0a8d1405a7272d
git push origin 201808241124rank

删除一个submodule

https://gist.github.com/myusuf3/7f645819ded92bda6677

寻找迭代更新最频繁的10个文件

git log --format='' --name-only | sort | uniq -c | sort -rn | head -n 10 
*****
Written by Lu.dev on 02 January 2015