Git学习备忘
本文参考廖雪峰写的精彩的git学习文档,大家可以直接去官网看原版,我这里只是便于自己记录梳理
原版地址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
ubuntu下可以直接sudo apt-get install git来安装git.如果是mac,Xcode自带git,但是版本可能比较低。你可以到git官网下载最新的git src或较旧的dmg文件到本地安装。安装完成后别忘了将原来旧的git链接指向新的git啊!第一次安装完毕后可以输入你的username和email地址:
git config --global user.name "hopy"
git config --global user.email "xxx@xxx.com"
然后新建一个目录,cd进入该目录输入:
git init
这样可以建立一个空的git仓库.在该目录下新建的每个文件,可以用add添加进git,但最后别忘了用commit提交:
git add *.h
git add *.c
git commit -m "1st create comm.h,sub.h,main.c,sub.c"
用以下命令将本地仓库和远程仓库连接起来:
git remote add origin git@code.csdn.net:xxx/xxx.git
用git status看当前仓库的状态,是否有文件被修改.用git diff看具体修改的内容:
git status
git diff
用git log看提交的日志,你也可以用git log --pretty=oneline看简化日志:
wisy@wisy-ThinkPad-X61:~/src/git_src/ccon$ git log
commit 4c8c0bd9d31c95dfb09e1c05e00c07f01aadb890
Author: hopy <hopy@live.cn>
Date: Wed Dec 17 15:21:39 2014 +0800
fix #if #endif
commit 4688a14ffde3efaadd76adb892079539b6117766
Author: hopy <hopy@live.cn>
Date: Wed Dec 17 15:12:42 2014 +0800
1st create comm.h,sub.h,main.c,sub.c
用reset将项目前进或回退到任意提交的版本,其中HEAD^表示后退到上一版本,^^表示会推到上上版本,HEAD~100表示上100个版本:
git reset --hard HEAD^
用reflog看前进或回退版本的日志:
wisy@wisy-ThinkPad-X61:~/src/git_src/ccon$ git reflog
4c8c0bd HEAD@{0}: reset: moving to 4c8c0bd
4688a14 HEAD@{1}: reset: moving to HEAD^
4c8c0bd HEAD@{2}: commit: fix #if #endif
4688a14 HEAD@{3}: commit (initial): 1st create comm.h,sub.h,main.c,sub.c
用reset加提交号切换任意置顶版本:
git reset --hard 4c8c0bd
用clone从远程库克隆工作目录
git clone git@github.com:kinds/ks.git
用checkout -b new_branch创建并切换分支,或者用branch new_branch创建分支,然后checkout new_branch切换分支:
git checkout -b new_b
or
git branch new_b
git checkout new_b
用branch查看分支,前面*号的分支是当前分支
git branch
用branch -d 删除分支
git branch -d some_b
用merge合并某分支到当前分支
git merge some_b
如果说我删除了一个分支,想恢复咋办?比如dev:main.c最后增加一行 puts("dev line");,add&commit后,切回master,然后同样修改master:main.c最后一行 puts("master line");同样add&commit,这时我想合并dev和master,于是乎输入git merge dev,会提示2个分支有冲突,需要手动修正。等到我修正后,也merge成功后,将dev分支删掉。这时我后悔了,我又想找回dev。其实很简单新建一个dev分支,查看log得知原来的dev的ID码,接着在dev分支中reset
--hard org_dev_ID即可。
可以用git log --graph查看“图形版”的log
可以用git merge --no-ff -m "msg" dev禁用Fast Forward,以在日志中生成分支历史合并记录
用git remote或git remote -v看远程工作区的push和fetch信息
用git checkout -b dev origin/dev 建立远程工作区中的对应的dev分支,然后用git pull origin dev 将dev内容抓取下来
建立远程分支和本地分支的链接:
git branch --set-upstream dev origin/dev
命令
git用于新建一个标签,默认为
tag <name>HEAD,也可以指定一个commit
id;
git tag -a <tagname>可以指定标签信息;
-m "blablabla..."
命令git tag可以查看所有标签,git
show可以查看某一个标签
命令git push origin可以推送一个本地标签;
<tagname>
命令git push origin可以推送全部未推送过的本地标签;
--tags
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin可以删除一个远程标签(在已经删除本地tag的前提下)。
:refs/tags/<tagname>
下面简单说下如何修改别人的git项目,在github中搜索一个感兴趣的项目比如说是:macruby,我想参与其中,如果只是git clone 原始的git macruby地址的话,只能下载到本地查看,但不能提交!这个自然是你没有权限,不能随便改别人的项目啊!但你可以在macruby项目页面中将项目fork到你自己的git中(在code.csdn.net中是"派生"),然后回到自己的git中看派生后的git地址,这时你可以用
git clone 派生的git macruby地址来下载和修改项目了,在你push修改后的代码上你的git后,可以在你的macruby项目中选择pull request(csdn git是"合并请求"),给macruby的原作者发一个请求,但原作者是否应用你的修改就是Ta的事了...
git包括一个全局的config文件,是当前用户目录下的.gitconfig文件。对于每个git仓库还有一个局部的config文件,在仓库目录下的.git目录中的config文件里。我们可以对于常见的git命令设置别名,而别名会设置在全局或局部config文件中,看你在设置时是否指定--global选项而定。
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.cim "commit -m'null'"
最后一个是作者不愿告诉我们的方法吗?呵呵。
一些不想让git监视的文件名(比如一些密码,隐私或各种语言生成得临时文件等)可以放在git仓库的.gitignore文件中,各种语言的官方推荐的.gitignore文件可以到https://github.com/github/gitignore观赏。.gitignore文件的格式如下:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
未完待续
Git学习备忘的更多相关文章
- Android学习备忘笺01Activity
01.设置视图 在Android Studio新建的项目中,通过 setContentView(R.layout.activity_main);方法将res/layout/activity_main. ...
- git使用备忘
简单的记录下现在使用git的时候,暂时或者常用到的命令,纯粹自己备忘,没用到过的命令就不写了,日后有用到了在补充. 1.把远程仓库克隆到本地:git clone 远程地址 2.分支操作 新建分支:gi ...
- Git命令备忘
最近在用Git,查了点相关资料,逻辑依然不太明了,先整理一部分备忘,以后补充 一.本地Git与Github/码云的关联 1. 设置本地用户名,邮箱 git config --global user.n ...
- git 命令备忘
git 常用命令备忘 仅作为日常使用备忘,并非常用命名整理 删除源端分支 git push orgin --delete branch_a a分支某次提交应用到b分支 切换到branch_b 分支: ...
- leaflet 学习备忘
leaflet 开源js地图工具.非常好用. leaflet参考:http://leafletjs.com/ 特性: 完全开源,可以基于不同的第三方瓦片生成地图. 基于原始GPS,无需转换 可创建离线 ...
- UML学习备忘
两大类UML图: 行为图(behavior diagrams)和结构图(structure diagrams) 行为图将引导系统分析员分析且理清"系统该做些什么"?系统分析 ...
- MVC4 学习备忘
WebConfig文件里添加数据库链接字符: <add name="MovieDBContext(可以自己取字符串名字)" connectionString="Da ...
- Git开发备忘
1.在Git中,上传了中文命名的文件,但是后面想删除的时候,发现中文命名被转义了. 利用Git add是无法添加这类文件的,所以这里我们需要用到 git add -u命令,即可实现成功添加. 2.在G ...
- 一滴一点vim(学习+备忘)
普通模式: h j k l 分别是左下上右方式移动: :w 保存修改 :q 推出 :wq 保存修改并退出 :q! 放弃修改强制推出 x 删除光标所在位置字符 i 在光标所以位置插入字符 删除类命令: ...
随机推荐
- spark shuffle
Spark Shuffle 1. Shuffle相关 当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle.由于shuff ...
- Android简易实战教程--第八话《短信备份~一》
各种手机助手里面都包含了短信备份这一项.短信的本分主要包含四项:内容body.事件date.方式type.号码address. 短信备份~一.使用一种很笨的方式来保存短信到xml文件中,而且保存在外部 ...
- Android首选项SharedPreference-android学习之旅(六)
SharedPrefenence采用的键值对的方式来进行存储,采用内部存储的方式. 实例 public class MainActivity extends Activity { private Sh ...
- 【unix网络编程第三版】阅读笔记(四):TCP客户/服务器实例
本篇博客主要记录一个完整的TCP客户/服务器实例的编写,以及从这个实例中引发的对僵死进程的处理等问题. 1. TCP客户/服务器功能需求 本实例完成以下功能: (1) 客户从标准输入读入一行文本,并写 ...
- iOS中 扫描二维码/生成二维码详解 韩俊强的博客
最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...
- Win10中virtualbox新建虚拟机不能设置64位系统解决
问题描述 在Win10中,安装virtualBox后,新建虚拟电脑时,所有的操作系统都没有64位. 解决 进入控制面板->卸载程序->启用或关闭windows功能->取消hyper- ...
- C#attribute-----------初级
前言: attribute是 .net FrameWork 提出的技术,可以为自己的代码添加注解,从而实现些特殊功能. 一. attribute功能 attribute被译作特性,既然是特性,必然功能 ...
- java设计模式---桥接模式
桥接模式的目的是把抽象和具体实现分离,其uml类图如下所示: public interface SendMessage { abstract void send(String message,Stri ...
- Cocos2D:塔防游戏制作之旅(十四)
塔之战:炮塔的攻击 炮塔就位了?检查.敌人前进中?再次检查 - 它们看起来就是如此!看起来到了击溃这些家伙的时候了!这里我们将智能置入炮塔的代码中去. 每一个炮塔检查是否有敌人在其攻击范围.(炮塔一次 ...
- 从JDK源码角度看线程的阻塞和唤醒
目前在Java语言层面能实现阻塞唤醒的方式一共有三种:suspend与resume组合.wait与notify组合.park与unpark组合.其中suspend与resume因为存在无法解决的竟态问 ...