标签 git 下的文章

git log --all -- ${dirname}

# choose the COMMIT_TAG that removed the folder 

git checkout ${COMMIT_TAG}^ ${pathtodir}${dirname}

# 重置当前分支的 HEAD 指针到指定的提交
git reset ${COMMIT_TAG} -- ${pathtodir}${dirname}


git revert  -n ${COMMIT_TAG}
git commit -m "revert this commit"

版本管理在编程中的重要程度不言而喻,其中git工作流也是最主流的方式,接下来总结一下git工作流中的一些比较实用的概念和具体方法。

在实际使用中,我还是用图形软件 sourcetree为主,不过图形软件只是为了方便,并且有很多用法还是要实用命令行来解决,所以要先理解概念,再熟悉命令,最后使用工具。

最常规的几个命令 init, add, rm, status, diff, commit 分别用来 新建仓库、添加、删除、查看概览、比较更改,提交更改。 基本上有这几个命令就可以顺利进行本地仓库的“备份”了。 clone, pull, push 是基于网络管理仓库比较常用的命令,用于 复制仓库,拉取更新,推送更新到服务器。

在git工作流中,协作的重要性是很高的,随着项目规模的升级,以及更多的人使用项目(fork),基于协作的共同维护就很有意义了。

这里主要有两个协作方式 1. 成为维护开发者 2. 创建分支、提交推送

第二种方式,不仅可以用于为源仓库贡献代码,也可以作为“定制化”开发的一种可行途径。这时候如果觉得自己开发的某些代码对于源仓库也有价值,可以再考虑贡献回去。

在github中,成为协作者主要是使用invitation功能,成为维护开发者之后,就可以和创建人一起管理仓库了。

当没有足够认可成为维护开发者,或者只是希望做一些定制化开发留为己用的时候呢,可以使用GitHub的fork功能。

这里我设计了一张图来诠释fork时,repo之间的关系。

在fork之后,实际上我们不必把自己的仓库当成是树枝,当我们创建完分支后,两个仓库已经是对等的了。我们可以向源仓库推送更新,也可以把源仓库的更新当做推送方,合并到自己的仓库中。

在github中,两个仓库之间的拉取是很简单的,无论是希望推送,还是希望从源仓库更新都适用这个拉取。 如果是希望更新就将两个仓库的顺序对转然后进行对比。

之后就根据需要进行合并操作就可以了。

如果是贡献代码,那么需要源仓库开发者通过并且选择再合并。我们更新则是自己来通过。


移除所有记录中的文件

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch THE_FILE_PATH' --prune-empty --tag-name-filter cat -- --all
git push --force

说来有点惭愧用了1年多的git至今还没有创建过分支,主要都是把git当成一个线上同步来用。 细想起来是因为我很难集中精力细看git的说明文档,另一方面很多网上的文章说的比较晦涩抽象,很难简明扼要的吸收要点。 但是git这些强大的功能到底作用是什么? 如何和实际工作联系,怎么样简单快速的get到这些功能的意义和使用方式呢? 今天就好好get一下。

git init

“这个文件夹,被我征用了,我要用它来做我的代码版本控制,其他工作就交给git你了。”

初始化仓库 初始化之后,git就会在这里生根发芽。

git clone git@xx.com/sth.git folder

“快帮我建一个和sth一样的仓库,放到folder文件夹就行了。(嗯,仓库我还没建,你看着办)”

- 阅读剩余部分 -