http://blog.163.com/xianfuying@126/blog/static/21960005201181482518631/git
在~/.ssh的位置vi id_rsa.pubgithub
拷貝的時候id_rsa.pub裏面從服務器
sh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQE....................................
到email地址結束。ssh
第一次生成的key竟然Access denied了。。ide
從新搞了一個成功。fetch
而後ui
git remote add origin git@github.com:用戶名/項目名稱.gitspa
git pull origin master 就PULL一個之前folk的項目下來了。unix
下次在本身的服務器上試試。code
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,這並非咱們想要的東西,這時能夠用 如下 方法來解決這個問題:
注意是分支,不是commit id#刪除遠程的xxx分支git push origin :xxx
對於一些只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 顯示效果差很少。