git常用命令
git config 可选参数(--system所有用户、--global当前用户、默认--local当前仓库)
git config --global user.name "天痕"
git config --global user.email "614891294@qq.com"
git config --list #配置列表
配置别名:
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
配置忽略文件.gitignore
git init 初始化,(1)创建.git目录,(2)把这个文件目录变成版本库
git add . #添加所有文件到缓存库
git add <path> # path 可以是文件名,文件夹。
git add *.sh # *表示当前所有的.sh文件
git clone <版本库的网址> # 从远程下载同名目录版本库 或者是支持其他SSH协议 ssh://example.com/path/to/repo.git
git clone <版本库的网址> <本地目录名> #配置设置本地目录的名字
git remote #显示仓库名字
git remote add origin git@server-name:path/repo-name.git # 连接远程空的仓库 用ssh协议 或者用网址https://github.com/michaelliao/gitskills.git
git remote -v #查看远程仓库的信息 fetch代表抓取,push代表上传
git remote show origin #查看远程仓库详情信息
git remote update origin --prune # 刷新本地的远程分支
git remote --prune origin # 清理远程已经删除的本地还存在的分支
git fetch origin #从远程仓库复制所有的版本,和分支
git fetch origin dev #从远程复制 dev分支的版本
# 清理远程已经删除的本地还存在的分支
git fetch --prune origin 或者 git fetch -p 或 git pull -p
git remote prune origin
git push <远程主机名> <本地分支名>:<远程分支名>
git push -u origin master #推送master分支到远程仓库 -u建立追踪关系并设置推送到这个远程分支上 如果master 不存在就新建
git push # 如果设置了默认的远程仓库就可以直接使用这个命令或者当前分支只有一个远程追踪
git push origin :master
#等同于 --delete
git push origin --delete master #删除远程主机上的 master
git push --all origin #推送所有分支
git push origin --tags #推送标签
git push origin tag_name #推送标签名字
git push origin :tag_name #删除标签名字
git push --set-upstream origin master # 推送到远程master分支上,如果远程没有master分支就创建,并创建追踪关系
git pull <远程主机名> <远程分支名>:<本地分支名> #取回远程主机某个分支的更新,再与本地的指定分支合并
git pull --rebase <远程主机名> <远程分支名>:<本地分支名> : 启用 --rebase模式 合并多个无用commit 信息
git status #查看当前文件的状态
git diff 文件名 # 比较当前工作区的文件和缓存区差异
git commit -m"描述信息" #提交缓存区的修改到版本库
git commit -am"" # 一键提交改动的文件,不用提交缓存
git commit --amend "" #不生成新的节点,覆盖当前的节点
git reset 命令用于将当前HEAD复位到指定状态
git reset --sofe (xxxx,HEAD^,HEAD~1) # 保留本地文件回滚 xxxx版本名称, HEAD^:上一个版本,HEAD~1:可选参数版本
git reset --hard (xxxx,HEAD^,HEAD~1) # 不保留本地文件回滚
git reset -- 文件名 #重新设置这个版本的文件,然后在提交
git reset HEAD <file> #撤销缓存区的某个文件
git rm <文件名或文件夹> # 提交删除版本库中的文件
git commit -m"" #才算真正的修改
git mv text.txt mydir #相当于提交到缓存区 把版本库text.txt 移动到mydir中
git mv text.txt text1.txt #重新提交到缓存区命名
git commit -m"" #才算真正的修改
git branch # 命令用于列出分支
git branch -a #列出本地和远程分支 -av -avv 查看追踪关系
git branch dev2 master # 在master分支节点创建dev2分支 master可以省略,就是代表当前分支
git branch -d dev2 # 删除分支
git branch -m dev2 version.2 #修改分支名字
git branch -D <name> #强行删除没有融合的分支
git branch -r #查看远程分支
git branch -vv #查看本地分支和远程分支的跟踪关系
git branch -u origin/<branch-name> #设置当前分支与远程分支的追踪关系
git branch --set-upstream-to <branch-name可以省略默认当前> origin/<branch-name> # 建立当前分支与远程分支联系
#主要是用来切换分支,此时会修改工作区的文件,所以可以用来恢复当前版本的文件,慎用,会撤销你当前修改的文件。
git checkout dev #切换分支 如果存在远程有的同名分支会自动创建并切换
git checkout -b dev2 <name> #在master创建dev2并切换分支到dev2,此时dev2指向master指向的分支,<name>代表master
git checkout -- 文件名 # 从版本库中回退工作区中的文件
git checkout -- . # 从版本库中回退工作区中所有的文件
git checkout -- *.txt # 从版本库中回退工作区中所有txt文件
git checkout -b dev origin/dev #创建本地dev切换到dev设置dev和origin/dev的追踪关系orgigin/dev代表远程dev分支
git checkout --track orgin/dev #创建一个跟远程分支同名的追踪关系,并切换
如果没有联系 git branch --set-upstream-to <branch-name> origin/<branch-name> # 设置当前分支与远程分支追踪关系
# 注意融合,前必须保证 缓存区没有提交,或者已经添加隐藏
git merge命令用于将两个或两个以上的开发历史加入(合并)一起
git merge dev2 #在当前分支合并dev2
#默认使用 Fast forward模式 简写--ff 会尝试用快进模式,当前分要合并的分支包含当前分支的所有信息,就是用快进模式,
不会创建新的节点,就是把当前的分支指向修改成合并分支的指向。删除分支后会丢掉分支信息。
#如果有新的内容会提示你如何操作,有冲突如何解决。
git merge --no-ff -m"描述信息" #创建新的分支 是禁用快进模式。 分支中commit会被添加到历史log中
git merge --squash fea2 #把最近commit历史合成一个合并成一个新的描述commit,不能自动的进行提交需要手动。
git commit -m ""
#这样直接把不同的地方取过来,进行添加缓存区,好像就是前分支做修改一样,然后在提交。不会记录融合信息。
git merge --abort 只用于 融合冲突时,返回融合前状态。
git rebase -i fea1 # 把最近commit记录合成一个commit提交 -i进入交互界面模式
#如果有冲突
1,修改冲突
2,git add . 提交文件
3,git rebase --continue 继续进行
git rebase --abort #如果融合途中不想进行了 可恢复之前的状态
git rebase --skip #跳过这一步
git log <branch——name> #列出分支在版本库中的记录信息 可以写分支名字
git log --no-merges # 跳过合并信息
git log -1 #输出最后一个提交信息
git log --graph # 查看合并历史
git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit #定义输出格式
git log --pretty=oneline # 可以跟别的格式进行组合
# -p 按补丁格式显示每个更新之间的差异。
# --stat 显示每次更新的文件修改统计信息。
# --shortstat 只显示 # --stat 中最后的行数修改添加移除统计。
# --name-only 仅在提交信息后显示已修改的文件清单。
# --name-status 显示新增、修改、删除的文件清单。
# --abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 就是版本库的名字
# --relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
# --graph 显示 ASCII 图形表示的分支合并历史。
# --pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
git reflog #查看命令历史
git stash #把工作区的修改的部分隐藏
git stash list #查看隐藏的部分
git stash pop #恢复同的把隐藏的部分给删除
git stash apply stash@{0} #可以多次使用stash 用序号来恢复
git stash drop stash@{0} # 删除隐藏部分
git stash clear #全部删除
git stash pop --index#--index出了恢复工作区的文件,还尝恢复暂存区的
git tag v1.0 #给当前分支的最新commit添加版本号
git tag v0.9 f52c633 # 给f52c633版本, 打上标签
git show <tagname> #查看标签信息
git tag -a v0.1 -m "version 0.1 released" 1094adb #给标签加上说明信息 -a用户指定标签名
git tag -s v1.5 -m 'my signed 1.5 tag' #使用代用GPG签名的标签
git tag -d v1.0 #删除标签
git push origin --tags #远程推送所有标签
git push origin v1.5 #远程推送一个标签
git shortlog # 显示 一个程序员在用了多少次 commit 参数-s -n
git describe # 显示最近的标签
git help 命令词 # 查看这个命令帮助
多提交,少推送。多人协作时,推送会频繁地带来合并冲突的问题,影响效率。因此,尽量多使用提交命令,减少合并的使用,这样会节省很多时间。
使用Git流(Git Flow),详见我的另一篇文章:一个成功的Git分支模型
使用分支,保持主分支的整洁。这是我强烈推荐的一点,在分支进行提交,然后切到主分支更新(git pull —rebase),再合并分支、推送。这样的流程会避免交叉合并的情况出现(不会出现共同祖先节点为多个的情况)。事实上,git合并操作让很多人感到不知所措的原因就是各种原因所产生的交叉合并问题,从而造成在合并的过程中丢失某些代码。保持主分支的整洁能够避免交叉合并的情况出现。
禁用fast-forward模式。在拉取代码的时候使用rebase参数(前提是保持主分支的整洁)、合并的时候使用—no-ff参数禁用fast-forward模式,这样做既能保证节点的清晰,又避免了交叉合并的情况出现。
变基参数
p,pick=使用提交
r,rework=使用commit,但编辑commit消息
e,edit=使用commit,但停止修改
s,squash=使用commit,但合并到以前的commit中
f,fixup=类似于“squash”,但放弃此提交的日志消息
x,exec=使用shell运行命令(行的其余部分)
d,drop=删除提交