git笔记
最新请跳转 https://gitee.com/pupudalishi/git-notes
1. 下载安装git
1.1 Linux下git安装
- CentOS或者Fedora
sudo yum install git
- ubuntu或者Debian
sudo apt-get install git
1.2 Windows下git安装
- git官网下载
1.3 Mac下git安装
- 安装Xcode时勾选安装
1.4 从源码安装
- 依赖多,放弃
1.2 查看安装是否成功
打开cmd,直接输入
git
或者查看git的版本,安装成功就会显示对应的版本
git version
1.3 git基本配置以及git的本地架构设计认识
1.3.1 本地架构图
-
版本库:工作区中有一个隐藏目录.git,这个目录不属于工作区,而是git的版本库,是git管理的所有内容
-
暂存区(git术语为索引):版本库中包含一个临时区域,保存下一步要提交的文件,比如我们后面用的add操作就是把我们提交的文件存到暂存区。
-
分支:版本库中包含若干分支,提交的文件存储在分支中,比如我们存在暂存区的文件通过commit操作就会存入到对应的分支。
Git 有三种状态,你的文件可能处于其中之一: 已修改(modified) 、 已暂存(staged)和已提交(committed)。
- 已修改:表示修改了文件,但还没保存到数据库中。(开发过程中修改了内容的文件)
- 已暂存:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。(add 添加的修改,用于提交)
- 已提交:表示数据已经安全地保存在本地数据库中。(commit 之后的分支上的一个稳定版本)
1.3.2 远程仓库工作模式
代码可以推送到远程仓库,同时方便多人协同开发
Centralized Version Control Systems,简称 CVCS
1.4 git常用命令
安装好git之后,找到你自己的工程/项目文件夹,
windows:鼠标右键就会有 git bash here
linux:则鼠标右键 在此处打开终端
mac:则需要先打开终端,再cd到你的工程/项目文件夹
习惯终端的的话,windows和linux都可以用cd跳转
git config 第一件事
-
介绍
.git/config文件有很多配置。。。
该工具来帮助设置控制 Git 外观和行为的配置变量。
这些变量会存在下面三个位置,每一个级别会覆盖上一级别的配置,所以 .git/config
的配置变量会覆盖 /etc/gitconfig
中的配置变量。
/etc/gitconfig
文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行git config
时带上--system
选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)~/.gitconfig
或~/.config/git/config
文件:只针对当前用户。 你可以传递--global
选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。- 当前使用仓库的 Git 目录中的
config
文件(即.git/config
):针对该仓库。 你可以传递--local
选项让 Git 强制读写此文件,虽然默认情况下用的就是它。 (当然,你需要进入某个 Git 仓库中才能让该选项生效。)
在 Windows 系统中,Git 会查找 $HOME
目录下(一般情况下是 C:\Users\$USER
)的 .gitconfig
文件。(在其中改过一次git gui的显示中文UTF-8的编码,虽然改完还是繁体字,但是能够读懂了)
-
配置用户信息(第一件事)
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
如果使用了 --global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global
选项的命令来配置。
-
配置文本编辑器
如果未配置,Git 会使用操作系统默认的文本编辑器。
$ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
- 检查配置信息
$ git config --list
git help
不如
#git help或者git -h
git help | git -h
本地英文手册
#start a working area (see also: git help tutorial)
git help tutorial
#此时会打开本地gittutorial.html文件
#在文件中DESCRIPTION有蓝色链接The Git User’s Manual,点进去就是用户手册
1.5 常用工作流
常用流程
已有项目
###########################################
git clone [url] #clone已有代码
#修改代码
git status #查看工作区文件修改情况
## 1如果所有修改都符合需要
git add [file name] #添加指定修改文件到暂存区(已修改->已暂存)
git add . #添加所有修改到暂存区(已修改->已暂存)
git status #检查添加到暂存区的内容
# 2如果添加完成
git commit -m "log of committing" #提交你的代码到本地分支并填写提交日志(已暂存->已提交)
git commit --amend -m "log of committing" #提交了还想把新的修改,修订到上一次提交,会替换上一次日志;如果是不同的功能,还是使用上面命令提交有多次日志(已暂存->已提交)
## 3成功提交
git fetch #拉取远程所有分支代码到本地缓存的远程分支代码
git rebase #合并本地当前分支和本地缓存的远程同名分支
## 4如果没有冲突
git push #提交到远程同名分支
###########################################
## 1如果有不想要的修改
git checkout [file]
#工程生成的临时文件可以在资源管理器手动删除
#一劳永逸的办法是添加.gitignore文件,在文件中对无需上传文件进行过滤
git status #再次查看工作区文件修改情况
## 2撤回暂存区的添加
git reset [file name] #将暂存区指定修改文件撤销(已修改<-已暂存)
git reset . #添加所有修改到暂存区(已修改<-已暂存)
## 3想要撤回提交
git reset HEAD~1 #撤回一次提交 (已暂存<-已提交)
## 4如果有冲突
#需要手动解决冲突的地方
#解决冲突最好以别人的版本为基础添加自己的修改
git add . #将解决完冲突的代码修改添加到暂存区
#修改完最好编译一次
git rebase --continue #继续合并
git push #推送到远程
未有项目
git init -bare or git init
裸仓库和标准仓库的区别
项目迁移
网上的git迁移,clone --bare或clone --mirror再push --mirror(拉下来,再推上去);都不好用,远程初始化为普通库和裸库都不成功
结论还是把远程的裸库拷贝下来,复制粘贴到要迁移的地方(建个文件夹 p r o j e c t n a m e project name projectname.git)
项目在迁移后的链接更改
【Git】git 更换远程仓库地址三种方法总结分享_git 更换远程地址-优快云博客
第二项会断开本地的链接,但是不影响远程仓库配置,能连接成功没有问题
分支管理
#[remote repository]为远程仓库,可通过git remote进行查看,通常为origin
git branch [branch name] #创建本地分支
git branch -a #查看所有分支,本地分支和远程分支
git checkout [branch name] #切换到分支
git push [remote repository] [branch name] #将本地分支推送到远程同名分支,如果没有该远程分支,会创建一个新的远程分支
git push [remote repository] [branch name]:[remot branch name] #将本地分支提交远程分支,如果没有该远程分支,会创建一个新的远程分支
git push [remote repository] --delete [remote branch name] #删除远程分支
git branch -d [branch name] #删除本地分支(要切换到其它分支才能删除
git push --set-upstream [remote repository] [branch name] #推送本地分支到远程的同名分支,如果没有该远程分支,会创建一个新的远程分支,还会建立跟踪关系
git push --set-upstream [remote repository] [branch name]:[remote branch name] #推送本地分支到远程的同名分支,如果没有该远程分支,会创建一个新的远程分支,还会建立跟踪关系
#建立跟踪关系后 git push 还是上传到默认同名仓库
已有项目的仓库创建
##远端
#创建你的git仓库文件夹,在文件夹中
git init --bare #初始化裸仓库
##本地
#进入项目最上层目录
git init #初始化本地仓库
git remote add origin [url] #添加本地仓库的远程地址
#此时本地和远程还没有分支 需要添加内容并提交才能创建分支,并且提交不可撤销
git status
git add .
git commit -m "reposity init committing" #会创建新的本地分支
git push #失败 current branch has no upstream branch
git push --set-upstream origin master
##就成功了
回退版本
gitk #查看要回退的目标版本号,并复制
#关闭gitk
git reset --hard [SHA1 ID] #粘贴刚才复制的版本号
git push -f #强制提交
标签
与v1.0 v2.0的提交日志是一样的吗?
1.6 其他
git checkout
放弃本地修改
$ git checkout .
$ git checkout -- filepathname
git撤销、还原、放弃本地文件修改_git放弃本地修改-优快云博客
git init --bare
初始化一个裸仓库