git常用命令汇总
git help
帮助指令会列出所有的git命令及其作用
'git help -a' and 'git help -g' list available subcommands and some
concept guides.
'git help <command>' or 'git help <concept>' to read about a specific subcommand or concept.
Offline
- 在本地添加和提交
git add file1.txt
git add file2.txt file3.txt
git add . 英文句号 . 可以一次添加所有修改过的文件
git commit -m "add 3 files."
no changes added to commit (use "git add" and/or "git commit -a")
git status 工作区的状态。
git diff用可以查看修改内容。
git reset --hard commit_id Git允许我们在版本的历史之间穿梭,HEAD指向的版本就是当前版本
git log --pretty=oneline 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
git log --p -2 查看最近两次commit之间的差异
git reflog 查看命令历史(本地),以便确定要回到未来的哪个版本。
git log 查看commits
-
版本库(Repository).git
隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout -- file。 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步, 第一步用命令git reset HEAD file 第二步按场景1操作git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git reset --hard commitid --一键还原
`git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。`
Online
-
远程仓库
-
创建SSH Key
ssh-keygen -t rsa -C "邮箱"
cd ~ 用户主目录下,.ssh目录
登陆GitHub,Account settings=> SSH Keys=> Add SSH Key=> Title=>
Key文本框里粘贴id_rsa.pub文件的内容
- git init + remote add = git clone
git init init git local repo
git remote add origin git@server-name:path/repo-name.git 关联一个远程库;
git clone git@server-name:path/repo-name.git
git push -u origin master 第一次推送master分支的所有内容;
git push origin master 此后,每次本地提交后,推送命令最新修改;
-
分布式版本系统
本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步 -
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
-
Git鼓励大量使用分支:
git branch -a -v 查看分支: -a 显示本地及远程分支 -v 详细信息
git branch <name> 创建分支: git branch dev
git branch -d <name> 删除分支: git branch -d/D dev -D 强制删除
git checkout <name> 切换分支: git checkout dev
git checkout -b <name> 创建+切换分支:git checkout -b dev
git merge <name> 合并某分支到当前分支,当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
git log --graph 分支合并图
steps:
git checkout master
git checkout -b issue-101
git add readme.txt
git commit -m "fix bug 101"
git checkout master
git branch -d issue-101
Git分支十分强大,在团队开发中应该充分应用。
–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
fast forward合并就看不出来曾经做过合并
git merge --no-ff -m “merge with no-ff” dev(branch no)
- stash功能
git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash apply,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
git stash pop,恢复的同时把stash内容也删了:
- 团队开发
git remote -v 查看远程库信息;本地新建的分支如果不推送到远程,对其他人就是不可见的;
git checkout -b branch-name origin/branch-name,在本地创建和远程分支对应的分支 本地和远程分支的名称最好一致;
git branch --set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联;
git pull 从远程抓取分支 如果有冲突,要先处理冲突。
git fetch --all
git reset --hard origin/master
git pull
- git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git log --pretty=oneline --abbrev-commit
git tag v0.9 6224937
git show v0.9
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
git tag可以查看所有标签。
git push origin <tagname>可以推送一个本地标签;
git push origin --tags可以推送全部未推送过的本地标签;
git tag -d <tagname>可以删除一个本地标签;
git push origin :refs/tags/<tagname>可以删除一个远程标签。
- alias 别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
- reset 撤销commit
git reset --soft head^
- linux alias
show all: alias
cancle: unalias aliasname
setup: alias dkb='docker build'
e.g.
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias dkb='docker build'
alias dki='docker images'
alias dkp='docker ps'
alias dkr='docker run'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias gta='git add .'
alias gtc='git commit -m'
alias gts='git status'
alias l='ls -CF'
alias la='ls -al --color=auto'
alias ll='ls -alF'
alias ls='ls --color=auto'
官方文档
https://git-scm.com/docs
中文文档
https://git-scm.com/book/zh/v2
从零开始学习推荐网站
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000