从零开始配置一个github仓库与本地同步:
安装git后,进行git全局配置:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
本地选择一个文件夹,在gitbash中执行git init命令,把这个目录变成git可以管理的仓库
创建SSH key:$ ssh-keygen -t rsa -C "youremail@example.com"
将.ssh目录下的id_rsa.pub公钥文件中的内容粘贴到GitHub Account settings页面SSH Keys下的add ssh key中
github上创建一个仓库与本地关联,如git remote add origin git@github.com:EllonDaris/py-projects.git
下一步,就可以把本地库的所有内容推送到远程库上: git push -u origin master,实际是把当前分支master推送到远程,如果出现以下报错:
$ 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 master
之后提交只要通过命令git push origin master
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,拉到工作区和暂存区。
已经有添加到暂存区的文件修改,之后又进行了修改。想要都撤销掉,变为和仓库中的版本相同(仓库覆盖工作和暂存): 方法一:1、git reset HEAD file 清空暂存区的提交,变为和仓库中的版本相同。2、git checkout -- file 以暂存区为蓝本,覆盖掉工作区。 方法二:git checkout HEAD -- file 。
已经添加到暂存区的修改之后又进行了修改,想要都撤销掉,变为和仓库中的版本相同(仓库覆盖工作和暂存): 方法一:git reset --hard HEAD 重设HEAD,hard参数覆盖工作区和暂存区。 方法二:强制切换到其他分支丢弃更改,然后再切回来。
撤销当前工作区的文件修改,变为和暂存区相同(暂存覆盖工作): 方法一:git checkout -- file 暂存区覆盖工作区(以暂存区为蓝本,覆盖掉工作区)。
撤销添加到暂存区的文件修改,将修改退回到工作区(暂存先覆盖工作,然后仓库覆盖暂存): 方法一:1、git checkout -- file 以暂存区为蓝本,覆盖掉工作区。 2、git reset HEAD file 清空暂存区的提交,变为和仓库中的版本相同。
清空暂存区文件修改: 方法一:git reset -- file 清空暂存区的文件修改。
清空暂存区: 方法一:git reset HEAD file 清空暂存区。
checkout文件层面的操作: 主要对暂存区和工作区起作用,一般有暂存区覆盖工作区的行为特征。
reset文件层面的操作: 主要对暂存区起作用。