Git入门与开发

从头开始复习git,熟悉git常见指令,安装,操作等

参考廖雪峰的教程

廖雪峰git教程

安装

Mac

有两种方法

  • brew安装git

brew官网

brew使用教程

  • Xcode安装git

Xcode7.0后的版本默认安装了git,在终端直接输入git,看是否已安装。

Windows

git官网

命令

创建版本库

git init 创建仓库

git add file 添加到git中(放入暂存区)

git add . 一次性全部添加到暂存区

git commit -m 'commit description' 提交修改好的文件到本地

git log 打印提交日志

git log —oneline 打印提交日志的简写版

git diff --name-only HEAD~1 查看最近一次提交修改的文件

版本管理

git reset —hard HEAD^ 回滚到上一个版本(HEAD代表当前版本,HEAD^代表上一个版本,HEAD^^代表上两个版本,依次类推)

git reflog 查看用户所有的提交记录

git reset —hard 1231234(提交id)回滚到1231234的提交版本

git checkout — file 放弃工作区中对file文件的修改,不论暂存区是否有该文件的修改记录,即该命令不会放弃暂存区的修改,只放弃工作区的修改

git reset HEAD file 放弃暂存区的内容(即放弃上一次add的内容),退回到工作区,此时的工作区并不是最新版本,而是在最新版本的基础上用户修改过的内容

关联远程仓库

已github为例,假设有两种情况:

1.本地已有git仓库或项目文件,想在github进行关联

  • 在github新建项目,不要勾选Initialize this repository with a README,默认创建即可
  • 关联github,在本地仓库终端输入git remote add origin git@github.com:dwfrost/GitStudy.git ,注意origin后的内容(SSH)可以从github上复制
  • 推送内容到github git push -u origin master

2.本地是空文件,想从已有的github项目克隆

  • 打开github项目,复制SSH
  • 在本地仓库终端输入git clone git@github.com:dwfrost/GitStudy.git
  • 如果是加入已有的项目,需要检出目标分支到本地,以便推送时本地分支和远程分支同名

git remote rm origin 删除已关联的远程仓库(一般用不到)

git remote 查看关联的远程仓库

一个本地库可以同时关联github和码云:

git remote add github git@github.com:dwfrost/GitStudy.git

git remote add gitee git@gitee.com:dwfrost/GitStudy.git

注意,远程仓库名称不是origin

然后分别推送

git push github dev

git push gitee dev

分支管理

git branch 查看当前所在的分支

创建

git branch dev 创建dev分支

切换

git checkout dev 切到dev分支

git checkout -b dev 创建并切换到dev分支

合并

git merge dev 将dev分支合并到当前分支

删除

git branch -d dev 删除dev分支(合并后才能删除,且当前分支不能为dev)

git branch -D dev 没有合并时,强制删除dev分支

暂存

git stash 将修改内容(stash)移到贮藏区

git stash list 查看贮藏区的内容(stash)

恢复贮藏区有2种办法:

1.git stash apply恢复贮藏区,但贮藏区依旧保留修改内容(stash),如果想删除,使用git stash drop

2.git stash pop恢复贮藏区的同时删除修改内容(stash)

推送

git push origin dev 将dev分支推送到远程仓库(origin)的dev分支上

标签管理

git tag v1.0 新建标签

git tag 查看标签

git show v1.0 查看标签信息

git tag v0.9 7ff4f56 给某次提交打上标签

git tag -a v0.9 -m "version 0.9 released" 7ff4f56 -a后面是标签名,-m后面是标签说明

git tag -d v1.0删除标签

git push origin v1.0 推送标签到远程

git push origin --tags 一次性推送全部标签

git push origin :refs/tags/v1.0 删除远程标签(要先删本地)

添加SSH

常见的远程仓库有github,码云等,为了方便本地和远程提交代码,需要配置SSH加密,如下:

1.创建SSH key。

创建前,看一下有没有。在用户目录下(mac),终端输入ls -ah查看隐藏文件,发现存在.ssh文件夹,cd .ssh->open .,看到存在id_rsaid_rsa.pub两个文件,说明已经有了SSH key。

如果没有,就需要创建。

$ ssh-keygen -t rsa -C "youremail@example.com"

一路回车,创建成功。

2.添加公钥

id_rsa:密钥是用户保管的

id_rsa.pub:公钥是放在远程仓库,用于和密钥配对使用。

复制id_rsa.pub文件中的内容,打开github,在账户管理选项中添加SSH key。

概念

工作区

工作区就是git能够管理到的工作区域,也就是该仓库下的所有文件,包括正在修改的和已经存在的文件。

暂存区

暂存区是git记录的修改状态,用户在工作区修改文件后,可以用git add file将文件修改放入暂存区。

注意,如果用户没有把修改操作放入暂存区,然后直接提交,那git是不会提交用户的操作的,git只提交暂存区中的修改操作。所以在开发过程中,我们通常如下操作:

* 写代码,写代码……

 * 一个小功能或模块完成,直接提交

 * 如果代码不多,先放入暂存区,然后接着写代码
 * 觉得ok了,放入暂存区,不ok千万别放

* 所有的改动一次性提交

另外,如果暂存区存在文件,是不能直接pull的。如果工作区存在修改文件,可以pull代码。

配置

.gitignore

有些文件的变动或者信息是不需要提交的,比如node_modulesdist以及系统产生的垃圾文件等。示例如下:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

如何让系统记住密码(https方式)

git config --global credential.helper store 在用户主目录下.gitconfig文件生成下面的配置

[credential]
    helper = store

以后就不用每次都输入账号密码了

配置别名

git config --global alias.st status 全局配置,用st代替status

去掉--global,那配置别名的文件存在于本仓库的.git/config中。

全局配置的文件在用户主目录下的隐藏文件.gitconfig中。

如果想删除别名,直接删除[alias]下对应的行即可。

举个栗子

删除文件

  • git rm file 相当于 rm file,然后git add file
  • 是否真的删除?
  • 是,git commit -m 'delete file'
  • 否,git reset HEAD file + git checkout -- file

多人协作

  • 查看远程库信息,使用git remote -v
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;如果使用sourcetree,右键origin,选择检出分支,即可在本地复制远程分支。
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
    原文作者:大白菜
    原文地址: https://segmentfault.com/a/1190000016809995
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞