zzGiti学习心得

什么是Git

  • Git 是分布式版本控制系统。
  • CVS 和 SVN 是集中式的版本控制系统。
  • 集中式版本控制系统,版本库是集中存放在中央服务器里,必须联网才能工作。
  • 分布式版本控制系统的安全性要高些,每个人电脑里都有完整的版本库,不需要联网。
  • 安装 Git 后,使用 git config 配置信息,使用 --global 参数,表示该机器上所有的 Git 仓库都使用这个配置。

 

 

创建版本库

  • 版本库:仓库(repository),可理解成一个目录,Git 管理该目录下所有文件。
  • 初始化一个仓库:git init 把当前的目录变成 Git 可以管理的仓库,空仓库。
  • 添加文件到 Git 仓库,两步骤:
    • git add file   // file 表示文件名,可添加多个 (git add . 匹配所有文件)
    • git commit -m "xxx" // xxx 表示提交内容信息,最好有意义,便于查看

查看工作区的状态

  • git status 查看仓库当前的状态。
  • git diff 查看修改内容,如 git diff file.txt 查看 file.txt 修改内容。

版本回退

  • git log 显示从最近到最远的提交日志,嫌输出信息太多,可以加上 --pretty=oneline 参数。
  • git reset --hard HEAD^ 回退上一个版本,HEAD 指向的版本是当前版本,HEAD^ 上一个版本,HEAD^^ 上上一个版本。
  • git reset --hard commit_id 指定回到未来的某个版本,其中commit_id表示你要回到未来那个版本的id。
  • git reflog 查看命令历史,记录版本对应的 commit_id。

工作区和暂存区

  • 工作区:电脑里能看到的目录。
  • 版本库:工作区中有一个隐藏的目录 .git,它就是 Git 的版本库。
  • Git 的版本库包括 stage 的暂存区,Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针 HEAD
  • 使用 git add 只是把文件提交到暂存区,然后使用 git commit 命令,才是真正把暂存区的所有内容都提交到当前分支。

管理修改

  • git diff HEAD -- file 可以查看工作区和版本库里面最新版本的区别。
  • 每一次修改,必须先使用 git add 提交到暂存区,要不然不会加入到 commit 中。

撤销修改

  • git checkout -- file 把 file 文件在工作区的修改全部撤销。
  • 如果使用了 git add到暂存区,没有 commit,可以用命令 git reset HEAD file 把暂存区的修改撤销掉,重新放回工作区;再使用撤销修改命令。

删除文件

  • 命令 git rm file 用于删除文件 file。

远程仓库

  • GitHub 提供 Git 仓库托管服务。
  • 本地 Git 仓库和 GitHub 仓库之间的传输是通过 SSH 加密的。
  • 步骤一:创建 SSH Key:ssh-keygen -t rsa -C "steveLau@github.com" (Windows 下打开 Git Bash); 用户主目录里找到 .ssh 目录,里面有 id_rsa(私钥) 和 id_rsa.pub(公钥) 两个文件。
  • 步骤二:在 GitHub 里,添加 “SSH Key”,在 Key 文本框里粘贴 id_rsa.pub 文件的内容。

添加远程仓库

  • 本地已经创建一个 Git 仓库后,又想在 GitHub 创建一个 Git 仓库,并且让这两个仓库进行远程同步。
  • 步骤一:在 GitHub 上新建一个仓库 Git-GitHub,复制SSH:git@github.com:steveLauwh/Git-GitHub.git。
  • 步骤二:在本地的仓库下运行命令:git remote add origin git@github.com:steveLauwh/Git-GitHub.git,关联远程仓库。
  • 步骤三:把本地库的所有内容推送到远程库上:git push -u origin master
  • 以后只要本地提交 git push origin master,就可以把本地 master 分支的最新修改推送到 GitHub。

从远程库克隆

  • 远程库已经准备OK,使用 git clone 克隆一个本地库,如:git clone git@github.com:steveLauwh/Git-GitHub.git
  • Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

从远程库更新到本地库

  • git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master
  • git log -p master.. origin/master //比较本地的仓库和远程参考的区别
  • git merge origin/master //把远程下载下来的代码合并到本地仓库,远程的和本地的合并

创建与合并分支 (看作指针的移动)

  • master 分支为 Git 主分支,HEAD 指向当前分支。
  • 创建 dev 分支,然后切换到 dev 分支上: git checkout -b dev;等同于以下两条命令:创建分支 git branch dev 和 切换分支 git checkout dev
  • git branch 列出所有分支,当前分支前面会标有一个 * 号。
  • 步骤一:git checkout master 切换回 master 分支。
  • 步骤二:git merge dev 将 dev 分支的内容合并到 master 分支上。
  • 步骤三:git branch -d dev 合并完成后,将 dev 分支删除。

解决冲突

  • 当 Git 无法自动合并分支时,就必须首先手动解决冲突。解决冲突后,再提交,合并完成。
  • git log --graph 查看分支合并图。

分支管理策略

  • master 分支应该是非常稳定的,仅用来发布新版本,平时不能再上面干活。
  • 使用 git merge 命令合并分支时,加上 --no-ff 参数,表示禁用 Fast forward,合并后的历史有分支。

 

Bug 分支

  • git stash 将当前工作现场“存储”起来,等以后恢复现场后继续工作。
  • git stash list 查看工作现场存储位置。
  • Git 把 stash 内容存在某个地方,恢复有两个办法:
    • 用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
    • 用git stash pop,恢复的同时把stash内容也删了

Feature 分支

  • 开发一个新 feature,最好新建一个分支。
  • 如果要丢弃一个没有被合并过的分支,可以通过 git branch -D 分支名 强行删除。

多人协作 (*)

  • git remote 查看远程库的信息。

  • git remote -v 显示更详细的信息。

  • 步骤一:用git push origin branch-name推送自己的修改。


 
  • 步骤二:如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并。

  • 步骤三:如果合并有冲突,则解决冲突,并在本地提交。

  • 步骤四:如果没有冲突或解决,再执行步骤一进行推送。

  • 另外,git pull 提示“no tracking information”,那么使用在本地创建分支和远程分支链接关系没有创建, 使用 git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致。


 

标签管理

  • 发布一个版本时,通常先在版本库上打一个标签 tag,这样就可以确定打标签时刻的版本。
  • tag 就是一个让人容易记住的有意义的名字,它跟某个 commit 绑在一起。

创建标签

  • git tag <name> 就可以打一个标签。
    
     
  • git tag 查看所有标签。
  • 找历史提交的commit id:git log --pretty=oneline --abbrev-commit
  • 当忘了打标签,找到历史的 commit id,然后使用 git tag <name> commit-id
    
     
  • git show <tagname> 查看标签信息。
  • git tag -a <tagname> -m "xxxxx"可以指定标签信息。
  • git tag -s <tagname> -m "xxxxx"可以用PGP签名标签。

操作标签

  • git push origin <tagname> 可以推送一个本地标签。
  • git push origin --tags 可以推送全部未推送过的本地标签。
  • git tag -d <tagname> 可以删除一个本地标签。
  • 先删除本地标签,再 git push origin :refs/tags/<tagname> 可以删除一个远程标签。
    
     

使用 GitHub

  • 参与各种开源项目。
  • 步骤一:在 GitHub 上,可以任意 Fork 开源仓库,然后从自己的账号下 git clone。
  • 步骤二:在本地进行修改,利用 Git 推送到 GitHub 上
  • 步骤三:在 GitHub 上发起 pull request 给官方仓库来贡献代码。

自定义 Git

  • git config --global color.ui true 命令输出不同颜色。
  • 编写 .gitignore 文件的作用是让 Git 忽略特殊文件。
  • 所有配置文件可以直接在线浏览:https://github.com/github/gitignore。
  • .gitignore 文件本身要放到版本库里,并且可以对 .gitignore 做版本管理。
  • 配置别名
    • 当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件 .gitconfig 中。
    • 每个仓库的Git配置文件都放在.git/config文件中。

在 README.md 中插入图片

在 GitHub 中使用 README.md 文件,这是一个 Markdown 文件,该文件中插入图片是有一定的格式。

https://github.com/用户名/repository仓库名/raw/分支名master/图片文件夹名称/***.png or***.jpg

原文地址:https://www.cnblogs.com/cx2016/p/12926157.html