Git使用说明
-
macOS: Git - Downloading macOS
-
Windows: Git - Downloading Windows
-
Linux/Unix: Git (git-scm.com)
-
创建新仓库
本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令
git init
,用以创建新的git -
克隆仓库
执行指令用以创建一个本地仓库的克隆版本
git clone /path/to/repository
如果是远端服务器上的仓库,指令应该是这样的:git clone username@host:/path/to/repository
-
组成Git仓库的三部分
- 工作目录:是本地中实际存在的文件目录
- 暂存区:是个缓存区域,临时保存你的改动
- HEAD:指向你最后一次提交的结果
working dir(工作目录) –add–> index(暂存区) –commit–> HEAD
-
添加和提交
添加修改或新文件,
git add <filename>
添加指定文件git add *
添加所有文件到暂存区
提交改动,git commit -m "代码提交信息"
,现在,你的改动已经提交到了HEAD,但是还没到你的远端仓库 -
推送改动
经过提交,你的改动现在已经在本地仓库的HEAD中了。可以通过以下指令将这些改动推送到远端仓库
git push origin master
, 可以将mater缓存你想要推送的任何分支
如果你还没有配置远程仓库地址,可以通过git remote add origin <server>
,将你的仓库连接到摸个远程服务器,配置好后就能将你的改动推送到所添加的服务器上 -
分支
分支是用来煎特性开发绝缘开来的。在你创建仓库的时候,master是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
创建并切换到dev
分支:git checkout -b dev
切换回主分支:git checkout master
删除分支:git checkout -d dev
切换会上一个分支:git checkout -
除非你将分支推送到远端仓库,不让改分支是不为他人所见的:
推送分支到远端仓库:git push origin <branch>
-
更新与合并
更新本地仓库至最新动态:
git pull
该指令执行了在工作目录中获取(fetch)并合并(merge)远端的改动。
将其他分支合并到当前分支(例如master):git merge <branch>
,此情况下git会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,可能出现冲突(conflicts)。这时候就需要你修改这些文件来手动合并这些冲突(conflicts)。修改后,你需要执行git add <filename>
用以将它们标记为合并成功。
预览差异的指令:git diff <source_branch> <target_branch>
-
标签
为软件发布创建标签二推荐的。
创建标签的指令:git tag 1.0.0 1a2b3c4d5f
, 1a2b3c4d5f是你想要提交ID的前10位字符。可以使用git log
指令获取提交的ID。你可以使用少一点的提交ID前几位,只要它的指向具有唯一性。 -
日志-log
用于了解本地仓库的历史记录,通过最简单的指令
git log
来查询。
只看某一个人的提交记录:git log --author=bob
一个压缩后的每一条记录只占一行的输出:git log --pretty=oneline
通过树形结果展示所有的分支,每个分支都表示名字和标签,同时也值输出一行:git log --graph --oneline --decorate --all
查看提交记录中修改的文件:git log --name-status
-
替换本地改动
加入你操作失误,你可以使用如下命令替换本地改动:
git checkout -- <filename>
,此命令会使用HEAD中的最新内容替换掉你工作目录中的文件。已经添加到暂存区的改动以及新文件都不会受到影响。
将当前分支的工作树状态和HEAD指针回退到最近的三次提交之前的提交状态:git reset --hard HEAD~3
-
stash
用于临时保存工作目录中的更改:
保存当前更改:git stash
,保存并附带描述信息:git stash "message"
查看stash列表:
git stash list
弹出最近一次的stash:git stash pop
,此命令会将最近一次的stash应用到当前工作目录中,同时删除对应的stash
弹出指定的stash:git stash pop stash@{<n>}
,应用指定编号的stash,例如git stash pop stash@{1}
应用最近一次的stash:
git stash apply
, 这条命令会将最近一次的stash应用到当前的工作目录中,但是不会删除该stash。
应用指定的stash:git stash apply stash@{<n>}
,应用指定编号的stash,例如git stash apply stash@{1}
删除最近一次的stash:git stash drop
,此命令会删除最近一次的stash -
快速切换上一个分支
git checkout -
-
展示本地分支关联远程仓库的情况
git branch -vv
-
列出本地和远程分支
git branch -a //或 git branch --all
-
查看远程分支和本地放置的对应关系
git remote show origin
-
远程删除了分支本地也想删除
git remote prune origin
-
删除分支
//删除本地分支 git branch -d <local-branchname> //删除远程分支 git push origin --delete <remote-branchname> //或 git push origin :<remote-branchname>
-
查看标签详细信息
git tag -ln
-
标签操作
//一次性推送所有标签,同步到远程仓库 git push origin --tags //删除本地标签 git tag -d <tag-name> //删除远程标签 git push origin --delete tag <tag-name>
-
放弃工作区的修改
//放弃指定文件的修改 git checkeout <file-name> //放弃所有修改 git checkout .
-
修改上一个commit的描述
git commit --amend -m "message" //假如你提交了一个commit,但发现漏掉了几个文件 git add README.md git commit -m "添加README.txt文件" git add LICENSE.txt #发现漏掉了一个文件 git commit --amend -m "添加README.txt和LICENSE.txt文件" #更新提交信息并添加遗漏的文件
-
展示简化的commit历史
git log --pretty=oneline --graph --decorate --all
-
强制推送
git push -f <remote-name> <branch-name>
-
在 commit log 中查找相关内容
# 通过 grep 查找,message:所需要查找的字段 git log --all --grep='<message>'
-
clone项目
# clone项目的所有内容 git clone <remote_url> # clone指定的单一分支 git clone -b <branch-name> --single-branch <remote_url> # clone最新一次提交 git clone --depth=1 <remote-url>