http://blog.163.com/xianfuying@126/blog/static/21960005201181482518631/

在~/.ssh的位置vi id_rsa.pub

拷贝的时候id_rsa.pub里面从

sh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQE....................................

到email地址结束。

第一次生成的key居然Access denied了。。

重新搞了一个成功。

然后

git remote add origin git@github.com:用户名/项目名称.git

git pull origin master 就PULL一个以前folk的项目下来了。

下次在自己的服务器上试试。

Guides: Tell git your user name and email address
Git needs to know your username and email address to properly tag your commits. This is normally done on a global level: [~]$ git config --global user.name "lubin"
[~]$ git config --global user.email lubin.z@gmail.com
You can override these settings on a per-repo basis: [~/path/to/repo]$ git config user.name "lubin"
[~/path/to/repo]$ git config user.email lubin.z@gmail.com
This change will only affect future commits. Past commits will retain the username and address they were committed with. Some tools will assume your github config is in the same place (http://github.com/blog/180-local-github-config): [~]$ git config --global github.user lubin
[~]$ git config --global github.token 6ef8395fecf207165f1a82178ae1b984

搞砸了,怎么恢复?

删光本地文件,这时候pull会说 already-up-to-date

那么checkout 上一版的hash id:

git checkout AAAAB3NzaC1yc2EAAAABIwAAAQE..

这样本地版本就低于远程的,再pull就可以恢复回去了!

有了搞砸之前的文件,可以重头来过。

但是改好后,可以commit,并不能push成功。

马上push会出现:

HEAD detached at 0d731b8
nothing to commit, working directory clean

由于脱离了head,指向的是一次commit的id

必须:

git checkout master
会提示:
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

这样做之前备份好之前修改好的代码,或者,根本就只是在脱离头部的时候将上一版拷出去改的也可以。

回到head,放入最新的文件,commit,push成功。

如果一开始就没有备份,那么只好git clone 后接git remote -v查询到的git库地址即可。

有一点要注意的是,clone下来如果git项目文件夹被覆盖一次,需要终端cd .. 然后重新进入该目录,否则会:

fatal: Unable to read current working directory: No such file or directory

切勿惊慌。。。

如果只是working tree被改坏了,文件没有什么改动,可以reset --keep

git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD]

重设working tree中发生变化的文件。

index,执行git add的操作,会对文件创建索引,所有被跟踪的文件索引会放入index,表示文件被修改待提交
working tree,当前工作区,被修改但未被add的文件,存储在工作区
ORIG_HEAD,用于指向前一个操作状态,每次的commit或者pull或者reset,git 都会把老的HEAD拷贝到.git/ORIG_HEAD,通过对ORIG_HEAD的引用可 以指向前一次的操作状态 、hard(慎用)
重设index和working tree,所有改变都会被丢弃,包括文件的修改、新增、删除等操作,并把HEAD指向<commit>,
因此通过git log查看版本提交记录,被reset的版本记录会被丢弃,但可以通过git reflog查看 、soft
不重设index和working tree,仅仅将HEAD指向<commit>,表示已经commit的文件会取消commit,
通过git status查看,文件会处于待commit状态“Changes to be committed” 、mixed(默认)
重设index,但不重设working tree,表示已经被add的文件,被取消add,
通过git status查看,文件会处于待添加索引状态 “Changes not staged for commit” 、merge
重设index,重设working tree中发生变化的文件,但是保留index和working tree不一致的文件 、keep
重设index,重设working tree中发生变化的文件

reset

曾经有前辈误删了commit之后用cherry-pick找回来

 git reflog
502dd0f HEAD@{}: HEAD~: updating HEAD
147b3b5 HEAD@{}: commit: test3
502dd0f HEAD@{}: commit: test2
0692c03 HEAD@{}: commit (initial): test1 git reset --hard 502dd0f
git cherry-pick 147b3b5

如果明知自己的代码没作什么修改,不是最新的,可以Fetch对方的代码,

但这并不会覆盖自己的旧文件,就算没有冲突,也还是需要merge,否则就只加入新文件。

git reset --hard HEAD
git clean -f -d
git fetch origin master

上面的reset可以清除一些已经删掉了的文件无意义的存在于index又无法rm的情况。

. git fetch:相当于是从远程获取最新版本到本地,不会自动merge

git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并 上述过程其实可以用以下更清晰的方式来进行: git fetch origin master:tmp
git diff tmp
git merge tmp
从远程获取最新的版本到本地的test分支上
之后再进行比较合并 . git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master

fetch和pull

git log --pretty online 更好看的log列表方式

git log --graph 用图表形式显示log

在HEAD后面跟^一个代表前一个版本,跟2两个表示前2个版本,~2也表示前2个版本。

git cat-file -p 分页显示文件内容

tree .git 用unix命令显示文件夹结构

touch 用unix命令新增一个文件,比如 touch hello.txt

mv 用unix命令移动文件,比如 mv aaa ../

-t 在unix命令中表示type

reset负责的是从responsitories到index的部分,会干掉index中有记录的文件。

checkout负责的是从index到working tree的部分,可与reset连用形成一次完整修改。

git reflog 查看丢失的commit id ,对于reset干掉的记录也可以显示,然后reset到那个id即可恢复index。

前面讲到的git reset只是在本地仓库中回退版本,而远程仓库的版本不会变化,这样,即时本地reset了,但如果再git pull,那么,远程仓库的内容又会和本地之前版本的内容进行merge,这并不是我们想要的东西,这时可以用 以下 方法来解决这个问题

        #删除远程的xxx分支  

        git push origin :xxx 

注意是分支,不是commit id

对于一些只pull不push的库,可以每次pull之前用git checkout -f 来否定自己的修改 与git reset --hard HEAD 差不多。

常常的会发现比起remote add, 直接clone会获得更完整的工程信息。

1. 最简单直接的命令

git clone xxx.git

2. 如果想clone到指定目录

git clone xxx.git "指定目录"

3. clone时创建新的分支替代默认Origin HEAD(master)

git clone -b [new_branch_name]  xxx.git

4. clone 远程分支

  git clone 命令默认的只会建立master分支,如果你想clone指定的某一远程分支(如:dev)的话,可以如下:

  A. 查看所有分支(包括隐藏的)  git branch -a 显示所有分支,如:    

* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master

  B.  在本地新建同名的("dev")分支,并切换到该分支

git checkout -t origin/dev 该命令等同于:
git checkout -b dev origin/dev

如果是先在本地建立了空的分支,要merge远程分支,只需要查看branch -a 后,merge远程分支

例如本地分支 master,远程分支 origin/master

git checkout master
git merge origin/master

另外有个git show HEAD 和log - p 显示效果差不多。

终端上设置git的更多相关文章

  1. Windows系统上设置 Git Bash 的 Font 及 Locale

    在windows 上使用 Git Bash 可以获得 unix 命令 操作体验. 但是初始的Git Bash的字体及语系都很不方便,需要自己设置. 在Git Bash的命令窗体上边框点击鼠标右键可以进 ...

  2. android studio在windows上设置git/ssh

    windows果然是与众不同的,凡事都要那么麻烦一点点(当然..是对程序员来说..) 一开始,我想用cygwin里的git,就省得我再多装一套软件,配置也可以统一,但事实证明不行 在android s ...

  3. 『现学现忘』Git基础 — 7、设置Git Bash终端默认路径

    目录 1.Git Bash默认路径 2.如何查看Git Bash终端默认路径 3.如何修改Git Bash终端的默认路径 4.拓展:指定目录进入Git Bash终端 5.注意事项 如果您不熟悉Git命 ...

  4. 转:sublime上使用git连接github

    "工欲善其事,必先利其器." 这是古人的教诲,也是一个高效率的工程师需要遵循的法则之一.从大学开始写Java使用了JBuilder,Eclipse,后来写PHP用了Zend,写Ja ...

  5. WebStorm和sublime上使用git连接github(转)

    WebStorm使用git连接github的方法: 用webstorm上传代码时,首先要先下载git,网址一搜就可以搜到,安装git,并且把ssh配置到github上.然后开始配置webstorm,打 ...

  6. 如何在服务器上搭建git服务器

    参考文章: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770 ...

  7. 如何在Window上使用Git

    开始的时候同事只给了一个地址,类似这样:git@111.111.1.1:ABCDEF (1)如何在Windows上使用Git 有一篇博客不错:http://www.tuicool.com/articl ...

  8. CentOs上搭建git服务器

    CentOs上搭建git服务器 首先安装setuptools wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0 ...

  9. 设置 git config 的一些默认配置

    设置 git status的颜色. git config --global color.status auto 一.Git已经在你的系统中了,你会做一些事情来客户化你的Git环境.你只需要做这些设置一 ...

随机推荐

  1. Windows 服务卸载之后 重新安装提示 “指定的服务已标记为删除”

    背景:        将一个项目做成一个windows服务,在调试的时候,需要卸载.安装该服务,但提示下面的错误:“指定的服务已标记为删除”,进入服务管理界面,启动自己注册的服务,无法手动更改成启用模 ...

  2. Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead

    “Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(B ...

  3. Linux系统的Cache工作原理和管理机制

    Linux系统Cache 管理是 Linux 内核中一个很重要并且较难理解的组成部分.本文详细介绍了 Linux 内核中文件 Cache 管理的各个方面,希望能够帮助到你. 操作系统和文件 Cache ...

  4. delphi TOpenDialog

        TOpenDialog     procedure TForm1.Button1Click(Sender: TObject);begin  with TOpenDialog.Create(ni ...

  5. [CSS] @keyframes

    @keyframes swing{ 0% { transform: rotate(0deg)} 100% {transform: rotate(-30deg)} } #sweetlandia{ ani ...

  6. linux诡异的半连接(SYN_RECV)队列长度

    linux诡异的半连接(SYN_RECV)队列长度(一) >>转载请注明来源:飘零的代码 piao2010 ’s blog,谢谢!^_^>>本文链接地址:linux诡异的半连接 ...

  7. 1/8=1/a+1/b,a,b为自然数

    #include "stdio.h" int main(){ int a; int b; for(a=1;a<1000;a++)  {  for(b=1;b<1000; ...

  8. u盘复制提示文件过大

    应该有很多个朋友也遇到过同样的问题,就是我们的u盘的明明可用的空间还有很多,甚至一个空的16g的u盘,但从window等操作系统向u盘拷贝文件的时候,却不能容下诸如iso4g的镜像文件,难道是生产u盘 ...

  9. oracle中所有关于时间日期的问题总结

    select current_date as 当前会话时间,sysdate as 系统时间, systimestamp as 系统详细时间 from dual;

  10. 【转】iOS使用NSMutableAttributedString实现富文本

    iOS使用NSMutableAttributedString实现富文本 在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘 ...