- svn
- 需要搭建一个svn服务器(HTTP/SVN),搭建svn服务器需要看一些手册
- git
- 不需要git服务器,任何一台安装git的PC都可以是git服务器,其他人可以用任何现有的方式(SSH/HTTP/本地文件系统)更新上传代码
$ touch Test2.scala
$ git add Test2.scala
$ git commit
$ git log #在push之前确认commit是否正确
$ git push
5.从远程git库克隆指定的分支,这次在B机器的/home/le/workspace/git/repo2/目录重新克隆一份代码
$ git clone -b scala_dev le@192.168.6.1:/home/le/workspace/scala_test
$ git branch #查看当前分支
#提交新的代码
$ touch Test3.scala
$ git add Test3.scala
$ git commit
$ git log #在push之前确认commit是否正确
$ git push
6.回到/home/le/workspace/git/repo2/更新代码
$ git pull #如果有错误,请按照错误提示修改.git/config文件
- 每次合并两个commit
$ git reset --soft HEAD^1
$ git commit --amend
- 合并最后n个commit
$ git rebase -i HEAD~n
#替换第n个pick为s保存
2.取消本地的commit
有时候commit了代码到了本地git库中,之后某种原因想删掉最后1条commit,可以直接恢复到之前的commit
$git reset --hard HEAD~1
3.使用git stash
如果你跟我一样也使用gerrit做code review,那么有可能遇到这样问题:
- 在同一个分支上有多个bug需要fix,fix完一个bug然后就commit代码到gerrit server上等待code review,在等待的过程中又开始fix另外一个bug,就在这个时候之前提交的代码被reviewer提示出错误,需要更新之前的代码,这个时候可以使用git stash来保存当前本地的修改。
- 在一个分支上修改了代码但是不想commit到本地git库,需要切换一个分支去修改代码,这个时候也可以使用git stash
$ git stash
# modify your code or checkout to another branch
# git commit --amend
$ git stash pop
4.从另外一个分支里面挑选一些commit到当前分支
假如你有两个分支,一个是dev分支,一个是release分支,在dev分支上已经有很了很多的commit,有时需要从dev分支上挑选一些commit到release分支上。
$ git log #查找到需要的commit id, 假设为5b531cb8c62cdb8b5f10c406e41824a6388e3a82
$ git checkout release
$ git log #看一下当前的commit log
$ git cherry-pick 5b531cb8c62cdb8b5f10c406e41824a6388e3a82
$ git log #此时可以看到commit log增加了
5. 出现error: The following untracked working tree files would be overwritten by checkout
$ git clean -d -fx ""
6.我一次commit 5个文件到gerrit上面,然后发现有一个不需要提交,只要提交4个就好,我想重新提交一次在同一个commit ID下面,我该怎么做?
前提代码还没有被merge进库
例如要取消文件2.txt, 那么先恢复2.txt到commit id 9a42e8e3f41dcf5029a11ce651f36cbdf37fc84d,你提交之前的那一个commit id
git reset 9a42e8e3f41dcf5029a11ce651f36cbdf37fc84d -- 2.txt
git checkout -- 2.txt
git add .
git commit --amend
C.一些参考资料
http://www.vogella.com/articles/Git/article.html [中文译文版本]