Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。
GIT 下载页面 https://git-scm.com/downloads
GIT 工作流程
选择组件
选择默认编辑器
选择命令行工具
选择客户端
选择安全连接方式
检出和提交换行格式
默认终端
其它选项
实验性功能
安装成功
git --version 查看版本号。/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。config 文件(就是 .git/config):针对该仓库。.git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。$HOME 目录下(一般情况下是 C:\Users\$USER)的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。git config --global user.name "abc"git config --global user.email "xxx@xx.com"git config user.namegit config user.emailgit config --listgit help 命令版本库又名仓库,英文名repository,这是一个目录,目录里的文件被Git 管理。所以创建一个版本库只需要在一个空目录里使用 命令即可。
git init但是要注意,git 只能跟踪文本文件的改动,避免出现编码问题,所有文本最好使用标准的 无BOm 的UTF-8 编码。
添加文件到git 仓库
# 首先将文件添加到 sage
git add readme.txt
# 提交到 Repository 的当前分支,我们创建 git版本库的时候,会自动创建一个master 分支。
git commit -m "My first submission."
# 查看还有那些文件没有提交
git status
# 修改readme.txt 文件,可以使用 git status 查看是否有修改。查看workspace 与 Repository,当stage 不是空,对比的是 workspace 和 stage 的差异。
git diff readme.txt
# 显示摘要而非整个 diff
git diff --stat
# 查看 Repository 和 stage 的差异。
git diff --cached readme.txt
git diff --staged
# 查看 Repository 和 workspace 的差异
git diff HEAD -- readme.txt
# 然后再使用以上几步,进行提交版本回退
# 查看历史记录,记录会按时间顺序逆序展示
git log
# 如果感觉输出信息太多,可以使用参数
git log --pretty=oneline
# HEAD 表示当前版本,id 就是那个很长度字符串。上个版本就是 HEAD^,上上个就是 HEAD^^。以此类推,如果比较多,可以使用 HEAD~100
git reset --hard HEAD^
# 如果要想恢复,需要使用 id,每个人的都不一样,id 不用写完,但是要和已有的不冲突
git reset --hard fb110
# 如果回退后,希望恢复,但是忘记id了,可以查看命令记录,有相应的id号。顺序也是按照时间逆序
git reflog
# 撤销workspace的修改,将Repository的最近文件覆盖workspace。没有--,就变成了“切换到另一个分支”的命令
git checkout -- readme.txt
# 撤销 stage 的修改。使用已提交到Repository的最近文件覆盖stage
git reset HEAD -- readme.txt
# 如果已提交到Repository,则需要使用版本回退
git reset --hard HEAD^
# 自己错删文件,需要恢复
git checkout -- test.txt
# 确定要删除库中的文件
git rm test.txt
git commit -m "remove test.txt"
每次提交的信息以时间逆序排列,HEAD 就是最新记录的指针,可以快速的找到需要的记录。
创建SSH Key
ssh-keygen -t rsa -C "xxx@xx.com"将用户目录下的.ssh 目录下的公钥内容复制到 https://github.com/settings/keys 中即可,title 任意。
由于现在是 Remote 上的仓库是空的,所以 Repository 连接 Remote
# 将 Repository 与 Remote 相连。添加后,远程库的名字就是origin,这是Git默认的名称。
git remote add origin git@github.com:username/repositoryname.git
# 现象 remote 复制到本地
git clone git@github.com:JackingQueen/FirestTest.git
# 将 Repository 的当前分支 master 推送到 origin
git push -u origin master创建与合并分支
# 创建other1分支
git branch other1
# 切换other1分支
git checkout other1
# 快速创建并切换分支,相当于上面两个命令
git checkout -b other1
# 创建并切换分支也可以使用
git switch -c other1
# 查看当前分支
git branch
# 合并other1分支到当前分支,这次合并是“快进模式(Fast-forward)”,不是每次合并都能Fast-forward
git merge other1
# 切换回 master
git checkout master
# 切换回已有分支也可以使用
git switch master
# 删除 other1分支
git branch -d other1解决冲突
# 以上是在当前分支要超过合并分支的时候,可以使用快进模式,但是如果两个分支对同一文件进行了不一样的操作,就会出现冲突
git switch -c other2
# 加入新内容 123456789
vi test.txt
git add test.txt
git commit -m "o2 commit"
git switch master
# 加入新内容 123abc
vi test.txt
git add test.txt
git commit -m "master commit"
# 此时将other2 合并到 master将出现冲突,合并失败
git merge other2
# 使用命令查看冲突文件
git status
# 活着使用 git log 来看
git log --graph --pretty=oneline --abbrev-commit
# 查看合并文件冲突的地方,手动解决完冲突后在提交
git add test.txt
git commit -m "test merge"
# 删除 other2 分支
git branch -d other2
# 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
# 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git merge --no-ff -m "merge with no-ff" devbug 分支 和 Feature 分支
#####bug 分支#####
# 当前工作正执行到一半,但是突然有新的 bug 需要修复,可以先使用 stash 将现场储藏起来,等到以后恢复现场继续工作
git stash
# 查看刚刚的工作现场
git stash list
# 第一种:恢复后,stash内容并不删除
git stash apply
# 需要使用命令来删除
git stash drop
# 第二种:恢复的同时把stash内容也删了
git stash pop
# 再次查看,就看不到什么内容了
git stash list
# 将某个提交 复制到当前分支,需要使用这次提交的 id。比如 把bug提交的修改“复制”到当前分支,避免重复劳动
git cherry-pick 4c805e2
#####Feature分支#####
# 开发一个新feature,最好新建一个分支。如果要丢弃一个没有被合并过的分支
git branch -D dev多人协作
# 查看远程库的信息
git remote
# 显示更详细的信息
git remote -v
# 推送分支
# bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug
# feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
# master分支是主分支,因此要时刻与远程同步
git push origin master
# dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步
git push origin dev
# clone时,只能看到本地的master分支
git remote add origin git@github.com:JackingQueen/FirestTest.git
# 如果push 失败,就先抓取分支
git pull
# 如果 pull 也失败,就设置dev和origin/dev的链接
git branch --set-upstream-to=origin/dev dev
# 最后在 pull ,然后 push
# rebase操作可以把本地未push的分叉提交历史整理成直线
git rebase
git log --graph --pretty=oneline --abbrev-commitGit的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动)。
# 创建标签
git tag v1.0
# 查看所有标签
git tag
# 根据 commid 打标签
git tag v0.9 f52c633
# 查看标签信息
git show v0.9
# 可以携带参数。用-a指定标签名,-m指定说明文字。
git tag -a v0.1 -m "version 0.1 released" 1094adb
# 删除本地标签
git tag -d v0.1
# 推送标签
git push origin v1.0
# 一次性推送全部尚未推送到远程的本地标签
git push origin --tags
# 删除远程标签,先删本地,再删远程
git tag -d v0.9
git push origin :refs/tags/v0.9git config --global color.ui true.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!git config --global alias.st status原文:https://www.cnblogs.com/jtznenic/p/11428809.html