Git 初探

原创 2013年02月01日 01:33:51

用了几次git了,一直没总结,还是不太熟。

下载和安装什么的就不说了。windows下推荐git和tortoise git。linux下的gitk貌似还不错。

0. 账号和设置(alias,颜色等)


git config --global user.name "linus-young"
git config --global user.email "test@test.com"
git config --global color.ui true # 开启全部颜色效果
# 常用命令alias
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ps push
# 使用vim 作为默认编辑器
git config --global core.editor vim
# 如果你在windows下使用git或是你的队友中有人使用win,你可以用下面这行命令来解决line-ending的问题。
git config --global core.autocrlf false # 自动将CRLF的结束符转换为LF的结束符
图片最后一行有误,注意修改

当然,你也可以通过更改 ~/.gitconfig 文件来配置好你的git。


1.本地创建新仓库

创建新文件夹,打开终端执行 

git init
这样就创建了一个新的git仓库

2.复制仓库

本地复制,创建一个本地仓库的克隆版本。

git clone /path/to/repository
将远端服务器上的仓库复制到本地,就跟下载差不多,如下例
git clone git@github.com:linus-young/depot.git

3.添加与提交

<pre name="code" class="plain">git add filename


git commit -m "代码提交信息"
但是经常会出现 deleted files not staged 的情况, 所以最方便的还是  
git add -u 更新所有修改(包括 add 和 remove)

4.推送到远端服务器

在github上申请一个帐号,create a new repo, 创建之后其实github上有提示要执行哪些命令。注意两个邮箱需一致。

至于本地的配置详见http://blog.csdn.net/ylm23_24/article/details/8297362

在当前本地文件夹下执行:

git remote add origin git@github.com:linus-young/depot.git

git push origin master
第一行代码是确定添加到github的哪个仓库,作为第一次提交。

第二行是将本地的所有文件上传到远端服务器上。master是默认分支,可改为其他分支。本地创建的其他分支默认是不可见的


5.分支

master是默认的。在其他分支上进行开发,完成后再合并到主分支上,有利于多人共同开发。

在当前本地仓库新建一个分支test

git branch test

若此时运行

git branch
可以看到所有当前存在的分支

test

*master


切换到test分支

git checkout test

现在来随便更改一些文件,并且提交,然后切换到master

(edit file)
git commit -m "try branch"
git checkout master

切换之后你打开刚刚修改过的文件,神奇的是貌似这些文件都没有被修改过!!原因是你此时处于master分支,test分支里面所作的改动是不起作用的,不信的话可以用

git checkout test 然后看看文件是否被修改了


然后你可以修改master分支下的一些文件并且提交

(edit file)
git commit -m "i just edit some file on master"

然后我们来合并test分支上的改动到master下

git merge test

报错的话可以用git diff 查看冲突

然后提交

git add .
git commit -m "i have merged test to master"

gitk

gitk 可以用图形化的方式很清楚地显示改动

下面这行可以删除test分支:

git branch -d test

6. 撤销操作

改了一大通之后,觉得改得不好,突然想放弃这些改动,让强大的git来帮你吧。
git checkout -f 
# 可放弃当前所有改动,恢复到上一次commit后的状态(即HEAD区),它不会影响到缓存区(Index)的改动,即操作了git add 命令的那些文件。
# 具有相同作用的一条命令是
git reset --hard HEAD
# 如果你仅仅只想放弃一个文件的改动,可用如下命令
git checkout -- filename 
-- 的用途在于将其后面的整个字符串识别为filename,就算filename是 -f 也行。详细介绍请见 stackoverflow


是不是执行了git commit 之后就没法更改了呢,当然不会啊。
实际上,你想回到哪一次提交的节点,就可以回到哪一次。git实在是太神奇了。
先获取提交的历史记录
git log
git log --oneline # 仅在一行输出commit的 sha1-commit-id 和 提交信息

选取想要回到的提交节点 (所以每次提交信息都要写地清晰易懂~)
git reset --hard <sha1-commit-id>

终端会返回信息 HEAD is now at  <sha1-commit-id>  commit-information
再回去看你的文件,是不是焕然一新了呢?

这是在本地的撤销提交操作啊,万一我已经push到github上了怎么办呢??( 也就是说现在github上的提交次数比本地多 )
我得把github上那些commit过的也删了啊。但是现在我直接 git push 它又不让。
这时候只要强制push就好了:(添加一个加号即可)
git push origin +master

关于上面两个撤销提交的操作,stackoverflow上还有很多解决方法:
delete a git commit
remove a commit on github


7.其他常见命令

git status 查看文件状态
git pull 相当于 git fetch + git merge, 从远程获取最新版本并合并到本地



参考资料:

git 入门(浅显易懂,值得收藏):http://rogerdudler.github.io/git-guide/index.zh.html

ProGit 中文版:https://github.com/progit/progit/tree/master/zh

但根据AndorChen所述,原作者没有继续维护,所以你也可以看下AndorChen重新组织翻译的:

https://github.com/AndorChen/progit-cn

git 官方文档:http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html

官方文档的部分译文:译文

高效利用github (阳志平):http://www.yangzhiping.com/tech/github.html

git reset:http://happycasts.net/episodes/34

codeschool 的 trygit:http://try.github.com/levels/1/challenges/1

学习git branch的在线小游戏: learnGitBranching


Git初探 - 1

Git简介 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件...

git初探——常用命令

$ pwd //显示当前目录 $ git init //将当前目录变成Git可以管理的仓库 $ git config --global user.name "Your Name" //设置用户名 $...
  • hanz666
  • hanz666
  • 2017年03月30日 17:59
  • 52

git 初探-从svn的过渡

git svn 的区别 git:分布式。开发者可以提交到本地,每个开发者机器上都是一个完整的数据库。两个开发者之间,可以通过打patch的方式交换文件。 svn:集中式。所谓 git 服务器,是指...

初探win下Git的使用

背景知识: 1.什么是Git? Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Rub...

初探git/phabricator

这两天初到公司代码管理用的是git/phabricator.自己也花了几天的时间进行了一些实践和学习 git用于版本控制的优点在这就不列举了,它具体的使用可以参考:点击打开链接,写的很详细 g...

git零基础深入浅出 之 [git初探]

转载,侵删,原http://blog.csdn.net/irean_lau/article/details/51661572 出于总结和推广git的目的,(实在太好用)。决定安利一篇git的博文。 ...
  • pan0755
  • pan0755
  • 2016年12月14日 10:26
  • 71

git零基础深入浅出 之 [git初探]

从未感觉学git如此轻松

社交网络初探——链路预测

社交网络可以用来描述现实社会中的实际网络,它包括人与人之间的社会关系,物种之间的捕食关系,科学研究中的合作关系等。大量研究已经表明在真实世界中各种不同社交网络具有许多共同的结构特征,例如小世界性质、无...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Git 初探
举报原因:
原因补充:

(最多只允许输入30个字)