Git 初探

用了几次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上还有很多解决方法:


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


评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值