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. Git学习(一) 版本号管理工具

    Git 是一个分布式版本号控制工具.它的作者 Linus Torvalds 是这样给我们介绍 Git  -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git ...

  2. 怎样给filter加入自己定义接口及调用

    本样例是在VirtualCamera的基础上加入的自己定义接口用来实现exe控制osd的显示. 1. 接口部分 #ifndef __H_MyFilter__#define __H_MyFilter__ ...

  3. 利用ssh传输文件 分类: 服务器搭建 Raspberry Pi 2015-04-12 18:47 58人阅读 评论(0) 收藏

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件 scp username@servername:/path/filename /var/www/local_dir(本 ...

  4. 吧php脚本打包成 exe程序

    操作方法 :FQ哦 https://www.youtube.com/watch?v=UQ3zxqh1YXY 有很多方法可以实现 找了个外国的哥们制作的工具 可以吧文件生成很简单的一个独立EXE文件 下 ...

  5. 理解 Linux 网络栈(1):Linux 网络协议栈简单总结 图

    http://www.cnblogs.com/sammyliu/p/5225623.html

  6. kswapd0、kjournald、pdflush、kblocked、migration进程含义 转

    kswapd0.kjournald.pdflush.kblocked.migration进程含义 1.kswapd0 Linux uses kswapd for virtual memory mana ...

  7. Linux之TCPIP内核参数优化

    /proc/sys/net目录 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),例如下面这 ...

  8. [转] 使用Git进行小项目代码管理

    http://www.uml.org.cn/pzgl/201206155.asp 之前在公司使用过SVN(无甚感觉)和ClearCase(把人恶心死的东西)两种版本控制工具,都不满意.后来想自己写点东 ...

  9. href与src的区别

    src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素. href ...

  10. HttpClient使用cookie

    import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; ...