作为一个Windows下的C#开发人员我一惯是反对使用UNIX下移植或Java移植的任何东西的,特别是Git这样通过shell实现再借助cygwin进行移植的东西。
但由于项目组用它,本人在经历了多番折磨后,简单说下git的用法。事实证明,项目组并不是只有我一人没掌握其用法。
为什么网上那么多文章,我还要在这里废话?
因为那些文章某些废话省略了,很不易读。
你必须用命令行。至于还用不用其它的,那就随你便了,命令行不可或缺。
TortoiseGit我已经证明存在一处功能缺陷,所以我很怀疑它还存在其它缺陷。
SourceTree有些功能没有,而且界面设计不合理,也很不符合一般Windows程序的思维,我已经看到我的同事在操作它时有相同的思维,但SourceTree却并不是那样设计的。
GitExtension也有些功能没有,使用上也有很多地方需要猜,界面的中文翻译也不专业。
以上三项,你觉得不服,我也不辩。
我只想说明一个问题:必须用命令行,至少目前是这样。如果你目前用git决不用命令行,那是你的本事,但我不具有这个能力。
但我觉得这其中TortoiseGit是必须安装的,因为在Windows的文件浏览器中真看本地库是,图标上可以显示出文件或文件夹的各种状态,比如哪些文件更改过了。这与TortoiseSVN是一样的。
1. 下载git,本人下载的是便携版。
2. 便携版不用安装,解压即可。
3. 运行git:运行其中的git-bash即可。
4. 建git库。建一个文件夹即可,但此时还不是库,一般你有两种选择:
1) 建一个空库,命令为:
git --bare init
2) 直接clone一个库。命令为
git clone <版本库的网址> <本地目录名>
需要注意的是,这里的第二个参数往往可以省略,这时会在当前目录创建一个文件夹并在其下建一个库。
在些还需要另外指出,在此命令行下,还可以使用DOS命令,比如更改当前目录的命令cd,但是不同的是,如果你需要切到到D盘,你需要用
cd /d
如果你需要切换到D盘下的Doc目录,则需要执行
cd /d/Doc
如果的d:/Doc目录下继续运行
git clone http://code.huawei.com/WeMind/WeMind.git
则会在d:/Doc目录下建一个WeMind目录,并把远程的WeMind库下载到该目录中。
命令执行完后如果目录下有了一个“.git”的隐藏文件夹,这就基本上说明库建好了。在UNIX下,以点号开头的文件就代表隐藏文件。
命令行下支持以shift + insert进行粘贴。
命令行下也支持方向键上下直接输入历史命令。
5. 下始使用
在上面的git clone完成后,doc目录下有了WeMind目录,这时只需要运行
cd WeMind
这时,提示符后不但目录改了,后面还多了
(develp)
这表示其目前的版本。
6. 各命令
git remote
它表示列出所有远程主机。WeMind里,这里显示
origin
如果运行
git remote -v
则不但显示origin,还会显示刚才clone时输入的版本库网址。
7. git branch -r 显示远程各版本
git branch -a 显示所有版本,到现在为此此命令只会显示develop
git branch -l 显示本地分支。
git branch 与带 -l 参数相同
其中以绿色显示的为当前版本
8. 建新分支
git checkout -b <新分支名> <源分支名>
比如
git checkout -b testNewBranch origin/develop
则会在origin/develop为基础建立testNewBranch分支。
注意,分支名不能有空格,加上引号也不行,至于怎么样在分支名中用空格,我不知道也不想知道。
9. 切换分支。命令为
git checkout <分支名>
比如
git checkout testNewBranch2
则切换到 testNewBranch2
9. 删除本地分支。命令为
git branch -d <分支名>
比如
git branch -d testNewBranch
则删除本地 testNewBranch 分支。
注意,不能删除当前分支。需要先切换到其它分支,再行删除。
10. 将本地版本推送到远程服务器。命令为
git push <远程主机名> <本地分支名>:<远程分支名>
比如
git push origin testNewBranch
则将testNewBranch 推送到远端origin这个主机下。
11. 删除远程分支。命令为
git push --delete <主机> <分支名>
比如
git push origin --delete testNewBranch
删除远程testNewBranch时,并不需要把切换出本地testNewBranch,本地当前为哪个分支,并不干扰远端为哪个要支。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论1 条评论
2016-07-15 10:40
在建分支时,按目录形式给成分支名即可,比如
git checkout -b B270/_0000000_测试用的 origin/develop
这样就会将'_0000000_测试用的'这一分支放在'B270'这个目录下。
提交时也一样,比如
git push origin B270/_0000000_测试用的
需要注意的是,可以用 tab 键来自动完成输入。
13. 本地分支重命名
git branch -m <原分支名> <更改后的分支名>
比如
git branch -m testNewBranch3 testNewBranch2
将 testNewBranch3 更名为 testNewBranch2
注意,这一行为远程服务器并不知道,也没有标识让下次提交时让它知道。
如果先向远程推送 testNewBranch3 ,再将其更名为 testNewBranch2,再推送 testNewBranch2,则远程服务器上即有 testNewBranch3,也有testNewBranch2。
14. 把本地tag推送到远程。
git push --tags
15. 获取远程tag
git fetch origin tag <tagname>
16. 获取远程分支
git pull <远程主机名> <远程分支名>:<本地分支名>
比如
git pull origin testNewBranch2:testnewBranch2
将远端主机origin下的testNewBranch2下载为本主分支testNewBranch2
17. 提交到本地库
git commit
19. 文件重命名
git mv version.txt version2.txt
对于批量重命名,请查看
http://zengrong.net/post/1236.htm
同时也建议在文件浏览器的右键菜单的TortoiseGit子菜单中进行重命名。
20. 中途退出,这个DOS就支持的命令,在git-bash里也一样支持
Ctrl + C
比如本人使用git whatchanged命令,发现显示太多内容,需要退出,就是这样处理的。
21. 显示最近修改的文件列表
git log --name-status 每次修改的文件列表, 显示状态
git log --name-only 每次修改的文件列表
git log --stat 每次修改的文件列表, 及文件修改的统计
git whatchanged 每次修改的文件列表
git whatchanged --stat 每次修改的文件列表, 及文件修改的统计
git show 显示最后一次的文件改变的具体内容
22. 对于git的更改记录,建议使用Git Extension更进查看