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的引用可 以指向前一次的操作状态 1、hard(慎用) 重设index和working tree,所有改变都会被丢弃,包括文件的修改、新增、删除等操作,并把HEAD指向<commit>, 因此通过git log查看版本提交记录,被reset的版本记录会被丢弃,但可以通过git reflog查看 2、soft 不重设index和working tree,仅仅将HEAD指向<commit>,表示已经commit的文件会取消commit, 通过git status查看,文件会处于待commit状态“Changes to be committed” 3、mixed(默认) 重设index,但不重设working tree,表示已经被add的文件,被取消add, 通过git status查看,文件会处于待添加索引状态 “Changes not staged for commit” 4、merge 重设index,重设working tree中发生变化的文件,但是保留index和working tree不一致的文件 5、keep 重设index,重设working tree中发生变化的文件
曾经有前辈误删了commit之后用cherry-pick找回来
1 git reflog 2 502dd0f HEAD@{0}: HEAD~1: updating HEAD 3 147b3b5 HEAD@{1}: commit: test3 4 502dd0f HEAD@{2}: commit: test2 5 0692c03 HEAD@{3}: commit (initial): test1 6 7 git reset --hard 502dd0f 8 git cherry-pick 147b3b5
如果明知自己的代码没作什么修改,不是最新的,可以Fetch对方的代码,
但这并不会覆盖自己的旧文件,就算没有冲突,也还是需要merge,否则就只加入新文件。
git reset --hard HEAD git clean -f -d git fetch origin master
上面的reset可以清除一些已经删掉了的文件无意义的存在于index又无法rm的情况。
1. 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分支上 之后再进行比较合并 2. git pull:相当于是从远程获取最新版本并merge到本地 git pull origin master
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 显示效果差不多。