Git 学习总结

神奇的 Git--https://github.com/Gitzhengbin(坑*的gitHub,突然就登不上去了,帐号密码错误,邮箱找不到,真坑)

害的又申请了一个:https://github.com/zhengbingit

基本配置:

  1.本地仓库管理者用户名与 Email,用于版本备注,与生成 SSH key
    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"
  2.创建版本库 ->git init
      把当前目录编程 Git 可以管理的仓库
      (mkdir abc)创建名为 abc 的文件夹
      (rm -rf abc)删除名为 abc 的文件夹
      -r 就是向下递归,不管有多少级目录,一并删除
      -f 就是直接强行删除,不作任何提示的意思
      (pwd)查看当前所在路径
      (ls -ah)查看文件夹所有文件,包括隐藏域

基本操作:

  查看仓库当前状态->git status
  查看仓库当前做了哪些修改->git diff
    查看工作区与版本库里面最新版本的区别->git diff HEAD -- readme.txt

  查看命令历史->git reflog
  查看提交历史->git log
    信息简略版->git log --pretty=oneline

  将文件向Git版本库中更新->
    1.git add 把文件修改添加到暂存区
    2.git commit 提交更改,把暂存区的所有内容提交到当前分支
    注意:
      要注意工作区与暂存区的概念
      * 第一次修改 -> git add -> 第二次修改 ->git commit
      Git管理的是修改,当用 git add 命令后,在工作区的第一次修改被放入暂存区中,等待被提交(commit),但是,第二次的修改并没有放入暂存区中(也就 是没有执行 git add 命令),所以,git commit 只负责把暂存区的修改提交,也就是说仅提交了第一次的修改,而第二次的修改并没有提交

版本回退:

  回到之前版本->git reset --hard HEAD^
  回到指定版本->git reset --hard commit_id

  本地仓库的版本回退后,-> git push -f,来强制覆盖掉远程仓库

远程仓库:

  从GitHub克隆一个仓库到本地Git
    ->git clone git@github.com:Gitzhengbin/gitskills.git
  把本地Git仓库与GitHub中的Git仓库进行远程同步
    1.在GitHub中创建新仓库,以仓库名为 learngit 为例
    2.->git remote add origin git@github.com:Gitzhengbin/learngit.git
      这一步算是添加一个origin(远程库)
    3.->git push -u origin master
      这一步算是将origin,推送到远程(GitHub)
      也就是把当前分支master推送到远程
      由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master 分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
           以后若再向这个仓库更新,则用->git push origin master 即可

  删除远程 branch(分支)、tag(标签,对某一时间点上的版本打上标签)

git push origin --delete tag <tagName>
git push origin --delete branch <branchName>

  删除远程仓库中文件:

git rm -r --cached target/    //删除远程仓库中的target文件夹中所有内容
git commit -m "删除远程仓库多余文件"
git push

本地同步远程仓库

  更新当前分支

    ->git pull

  从远程(origin)获取最新版本并merge(合并)到本地

    ->git pull origin master

  获取服务器端的改动,比如其他用户新建了一个分支并push到了服务器,运行这个命令之后会得到这个分支的信息

    ->git fetch

  从远程获取最新版本到本地,不会自动merge(合并)

    ->git fetch origin master

分支管理:

  创建分支并切换到分支'dev'
    ->git checkout -b dev
    等价于
      ->git branch dev
       +git checkout dev
  查看当前所有分支
    ->git branch
  (* 代表当前所在分支)
  删除分支
    ->git branch -d dev
  合并分支dev到当前master的版本
    ->git merge dev
  切换分支(dev)与主线(mester)
    ->git checkout [dev/master]
  查看分支合并图
    ->git log --graph

遇到的问题:

  问题1:fatal: remote origin already exists.

  解决:git remote rm origin

  问题2:error: failed to push some refs to 'git@github.com:Gitzhengbin/mxbc.git'

  解决:由于向远程仓库提交的本地代码,与远程仓库的代码不一致(远程仓库比本地仓库多,比如远程仓库多一个 README.md,遇到这个问题就由我在远程添加这个文件造成的)

     所以首先将远程仓库与本地仓库进行合并后,再进行推送

     git pull --rebase origin master(注:pull=fetch+merge) 

------------16.10.25更新------------

  问题3:fatal: Authentication failed for 'http://********.git/'

  解决:

git config --global user.name "***"
git config --global user.email "***@***.com"

   并按提示输入 git 仓库的密码。

------------17.03.25更新------------

  问题4:push 时需要输入账户名和密码

  原因:原因是添加远程仓库的时候使用了 https 的方式,所以每次都使用 https 的方式 push 到远程库。

  解决:

首先确定当前使用的传输协议是否为 https:

git remote -v

如果如下所示:

origin    https://github.com/***/chapter1 (fetch)
origin    https://github.com/***/chapter1 (push)

那么就说明当前的传输协议为 https,下面命令将其修改为 ssh 的方式:

git remote rm origin 
git remote add origin git@github.com:***/chapter1.git
git push -u origin master

 ------------17.07.03更新------------

  修改前一次 commit 的备注内容

git commit --amend

  删除还没有 add 的文件

git clean -df、-n

感谢:廖老师的博客教程

原文地址:https://www.cnblogs.com/zhengbin/p/5170228.html