从零开始配置一个github仓库与本地同步:git
安装git后,进行git全局配置:github
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
本地选择一个文件夹,在gitbash中执行git init命令,把这个目录变成git能够管理的仓库ruby
建立SSH key:$ ssh-keygen -t rsa -C "youremail@example.com"
bash
将.ssh目录下的id_rsa.pub公钥文件中的内容粘贴到GitHub Account settings页面SSH Keys下的add ssh key中ssh
github上建立一个仓库与本地关联,如git remote add origin git@github.com:EllonDaris/py-projects.gitfetch
下一步,就能够把本地库的全部内容推送到远程库上: git push -u origin master,实际是把当前分支master推送到远程,若是出现如下报错:spa
$ git push origin master
To github.com:EllonDaris/py-projects.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:EllonDaris/py-projects.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.指针
由于在github上有一个readme.md文件,须要执行git pull --rebase origin master把这个文件更新下来,接着再git push -u origin mastercode
以后提交只要经过命令git push origin masterrem
git clone + 仓库的ssh地址便可克隆到本地
----------------------------------------------------------------------------------------------------------------------------------------------
下面是一些经常使用命令:
git add <filename>添加须要提交的文件,也可git add . 所有提交
git diff <filename>查看修改的具体内容
git status查看仓库当前状态
git commit -m "..." 提交时备注修改的内容
git log (--pretty==oneline )查看历史记录
git reset --hard HEAD^ 回退到上一版本(git中,HEAD表示当前版本,HEAD^表示上个版本,……以此类推,前100个版本HEAD~100)
或者git reset --hard +(commit id)
git reflog 记录每一次命令,能够用来查询每一个版本的commit id
整个目录是一个工做区,.git是版本库,工做区中的文件被add时,就是被添加到stage(即暂存区),commit后就被提交到当前分支,HEAD指针指向master分支中须要的版本
git checkout -- file 让这个文件回到最近一次commit或add时的状态
当一个修改被add但未commit时,能够用 git reset HEAD filename能够把暂存区的修改撤销掉从新放回工做区,再git checkout --filename丢弃工做区的修改
工做区中的文件被删除后,须要git rm filename 并 git commit 进行同步,若是是误删,用上面的命令 check out -- filename
----------------------------------------------------------------------------------------------------------------------------------------------
下面是别人整理的一些心得,一并放上来了。
从历史的提交创建新分支的方法: 方法一: checkout到历史提交,而后checkout -b。 方法二: reset到历史提交,checkout -b,而后再reset到原来的版本。 方法三: git branch <branch> <start point>
将某个历史版本所有拉到工做区和暂存区: 方法一: 可能的需求是为了将过去删除掉的修改从新应用到最新的版本,这时能够先回到历史版本处创建分支,而后回到原来的最新的版本,进行merge分支的操做。 方法二: reset加上hard参数到须要的历史版本,而后再reset加上soft参数回来。
将历史版本的某文件版本拉到当前工做区或者暂存区进行处理: 方法一: git reset HEAD~2 foo.py,直接拉到暂存区。 方法二: git checkout HEAD~2 foo.py,拉到工做区和暂存区。
已经有添加到暂存区的文件修改,以后又进行了修改。想要都撤销掉,变为和仓库中的版本相同(仓库覆盖工做和暂存): 方法一:一、git reset HEAD file 清空暂存区的提交,变为和仓库中的版本相同。二、git checkout -- file 以暂存区为蓝本,覆盖掉工做区。 方法二:git checkout HEAD -- file 。
已经添加到暂存区的修改以后又进行了修改,想要都撤销掉,变为和仓库中的版本相同(仓库覆盖工做和暂存): 方法一:git reset --hard HEAD 重设HEAD,hard参数覆盖工做区和暂存区。 方法二:强制切换到其余分支丢弃更改,而后再切回来。
撤销当前工做区的文件修改,变为和暂存区相同(暂存覆盖工做): 方法一:git checkout -- file 暂存区覆盖工做区(以暂存区为蓝本,覆盖掉工做区)。
撤销添加到暂存区的文件修改,将修改退回到工做区(暂存先覆盖工做,而后仓库覆盖暂存): 方法一:一、git checkout -- file 以暂存区为蓝本,覆盖掉工做区。 二、git reset HEAD file 清空暂存区的提交,变为和仓库中的版本相同。
清空暂存区文件修改: 方法一:git reset -- file 清空暂存区的文件修改。
清空暂存区: 方法一:git reset HEAD file 清空暂存区。
checkout文件层面的操做: 主要对暂存区和工做区起做用,通常有暂存区覆盖工做区的行为特征。
reset文件层面的操做: 主要对暂存区起做用。