git命令合集

##快捷键
##一. 快捷键
1. 清屏快捷键  control+L 
2. vim快捷操作 
* control+b 往上翻页 
* Control+f  往下翻页 
* shift+g  回到末尾 
3. oh my sh(https://ohmyz.sh/) 
4. 数据库查询工具  Data grip 
5. control+a  快速跳到命令头部 
6. control+e  快速跳到命令尾部 

 

##二. Git基本命令
1. git add 
* 作用: 将未追踪的文件纳入追踪文件中/将工作去修改添加到缓存区中/当文件出现冲突时,手动修改冲突后使用git add filename表示已解决冲突 
* git add test.txt      提交指定文件到缓存区 
* git add .   提交当前工作区的所有修改到缓存区(并忽略.gitignore中的文件) 
* git add *   提交当前工作区中所有修改到缓存区(不忽略.gitignore中的文件) 
2. git rm --cached test.text   删除提交的缓存 
3. git commit 
* git commit -m "tips"  提交到版本库 
* git commit -am "tips"  提交到缓存区并提交到版本库 
 
4. git status 
5. git log    查看提交历史 
* -p 展开显示每次提交内容的差异 
* -n 仅显示最近的n次更新 
* --stat 仅显示简要的增改行数统计 
* --pretty=oneline 
* --pretty=format:"%h - %an, %ar : %s" 
* git log --graph --pretty=oneline --abbrev-commit  查看log的简易版 
6. git config(3种) 
    * 修改用户名和密码 
    git config --global credential.helper osxkeychain   清除用户信息后再次拉取代码即可 
* 设置name和email 
git config --system user.email  [email protected]  修改/etc/gitconfig文件   全局配置 
git config --global user.email  [email protected]  修改~/.gitconfig文件     针对用户的配置 
git config --local user.email   [email protected]  修改.git/config文件      针对项目的配置 
* 删除name或者email 
git config --global  --unset user.emial
* 查看config用法   
git help config
git config --help
man git-config
* **别名** 
git config --global alias.br branch  设置git别名 
git config --global alias.unstage "reset HEAD"  两个以上的单词设置git别名
git config --global alias.ui '!gitk'  给外部命令设置git别名
7. 删除文件 
* 使用 git rm 
删除并提交
        git rm test.txt       删除文件并将删除文件提交到暂存区     
        git commit -m "del test.text"
        删除并恢复
  git rm test.txt         删除文件 
  git add test.txt 
  git reset HEAD  test.txt      将待删除的文件恢复到工作区 
  git checkout -- test.txt      将工作区中的修改丢弃 
  * 使用 rm 
8. git mv oldFileName newFileName  重命名 
9. git commit --amend -m "修改最近一次提交的commit消息" 
10. .gitignore 改文件放在项目根目录下 
* \*.a 忽略所有.a结尾的文件 
* !lib.a lib.a文件除外 
* /TODO 忽略根目录下的TODO文件 
* build/ 忽略build/目录下的所有文件 
* doc/\*.txt 忽略doc/note.txt 但不包括 doc/server/arch.txt 
* /\*/doc.txt  忽略一层目录下的doc.txt文件 
* /\*\*/doc.txt   忽略任何目录下的doc.txt文件 

 

##三. 分支重要操作
1. git checkout 
* git checkout new_branch  切换分支 
* git checkout -   切换最近一个分支 
* git checkout -d new_branch  删除分支(当前分支不能为将删除的分支)  该分支未做任何修改 
* git checkout -D new_branch  删除分支  不管该分支是否已合并 
* git checkout -b new_branch1 创建并切换到新分支(新分支是基于master创建的/相当于master分支的副本) 
* git merge new_branch  将mew_branch合并到当前分支 
* git checkout -b develop origin/develop 创建并切换到develop分支且该分支与远程develop分支对应 
* git checkout --track origin/develop  与上述效果一样 
* 删除本地所有分支 
* git checkout master   切换到master分支 
* git branch | grep -v 'master' | xargs git branch -D   将git branch的结果进行筛选,除去master,将处理后的结果作为git branch -D的参数来进行删除分支 
2. 快进(Fast-forward)  master未修改  new_branch在master的基础上修改 
* **HEAD指向当前分支  master指向提交** 
* git checkout -b new_branch  (master上新建分支new_branch,HEAD指向当前分支new_branch) 
* git add test.txt   git commit -m "add test.txt"  (new_branch上提交commit1) 
* git checkout master  (HEAD指向master) 
* git merge new_branch  (master上合并new_branch的所有commit) 
3.  master已修改 new_branch也修改
  
    * master分支修改并已commit 
    * new_barnch分支修改并已commit 
    * master分支merge分支new_branch  若有冲突解决冲突  解决后进行git add 和 git commit 
    * new_branch分支合并解决冲突后的master分支  以master分支内容为准  因为此时master分支的commit在new_branch分支的commit之后 
4.  git merge new_branch --no-ff  禁用fast_forward 这样master在合并分支的时候会新建一个commit id 
5.  git merge new_branch   fast-forward模式直接将master指向new_branch最新的commit 不会新建一个commit id
6.  git checkout -- text.txt  **将工作区的内容与缓存区最近一次添加的内容对比,丢弃掉工作区中相对新增的修改** 
7.  git reset HEAD text.txt  **将提交到暂存区的内容从暂存区回退到工作区** 
8.  git branch 
* git branch   查看当前分支(只包含本地分支) 
* git branch -a 查看分支(包含本地分支和远程分支) 
* git branch new_branch   创建新分支 
* git branch -m "new_name"  本地分支重命名 
* git branch -av 查看分支以及最近一次的操作信息 
* git branch -d br1 删除本地分支 

 

##四. 版本回退
1. 回退到上一个版本 
* git reset --hard HEAD^       回退到上一个版本(上两个版本用  ^^ ) 
* git reset --hard HEAD\~10    回退到倒数第10个版本 
* git reset --hard commit_id   回退到指定commit_id版本 
* git reflog  查看操作日志  可以找出最新提交的commit_id 

 

##五. 保存工作现场
1. 保存现场 
* git stash 
* git stash list 
2. 恢复现场 
* git statsh apply (stash 内容并不删除,需要通过 git stash drop stash@{0}手动删除) 
* git stash pop (恢复的同时也将stash内容删除) 
* git stash apply stash@{0}  恢复并并删除stash{0} 

 

##六. 标签
1. git tag v1.0  轻量级标签 
* git show v1.0   查看标签的信息 
* git tag    查看所有标签 
2. git tag -a v1.0.2 -m 'release version' 带有标注的标签 
3. git tag -d tag_name  删除标签 
4. git tag -l '\*.2'  查看标签 
5. git blame --help  
6. 远程标签 
* git push origin v1.0  将本地标签推送到远程 
* git push origin v1.0 v2.0  推送多个标签 
* git push origin --tags  把本地尚未推送的标签都推送到远程 
* git push origin  :refs/tags/v6.0  删除远程标签 
* git push origin -delete tags v6.0  删除远程标签(同上) 

 

##七. diff
1. git diff  比较暂存区和工作区的差别 
2. git diff HEAD  比较工作区和版本库的差别 
3. git diff --cached commit_id 比较暂存区和版本库的差别 

 

##八. 远程和github
1. git push   
* git push **将本地版本库中的远程分支origin/master更新到最新/将本地修改推送到远程版本库** 
* git push origin src:dest  git push的完整写法/将本地的src分支提交到dest分支,一般src=dest 
* git push origin :develop  将本地的空分支推送到develop分支 == 删除远程develop分支 
* git push origin --delete develop  删除远程develop分支(同上) 
* git push --set-upstream origin br1  **新建远程分支br1并将本地br1分支用来追踪远程br1分支(当远程分支br1不存在时)** 
* git push --set-upstream origin br1:br2 新建远程分支br2并将本地分支br1用来追踪远程分支br2 
* git push origin HEAD:develop2  本地分支与远程分支不同名时的推送命令 
* git push origin develop:develop2 同上 
* 远程分支的重命名:删除远程分支->本地分支重命名->推送到远程分支 
2. git pull   
* git pull **获取远程版本库(git fetch)/将远程版本库和本地版本库合并(git merge)** 
* git pull origin src:des   git pull的完整写法  将远程分支src拉取到本地分支des 
* fetch + merge 
* git checkout -b develop origin/develop **当本地不存在develop分支时,创建并切换到develop分支且该分支与远程develop分支对应** 
3. 远程版本库和本地版本库关联 
* git remote add origin https://\*.git   添加远程版本库且默认命名为 origin 
* git push -u origin master    将本地master与远程master关联并推送到远程master  
    * git remote show origin   查看远程版本库的详细信息 
    * ssh-keygen  生成公钥  生成的的文件地址为 \~/.sh 
    * git remote rm origin 删除远程仓库 
4. git clone 
* git clone [email protected]:..../\*.git  将远程代码克隆到本地且项目名称默认为远程项目名称 
* git clone [email protected]:..../\*.git  mygit   将远程代码克隆到指定文件夹(mygit)中 
* git clone -b new_branch [email protected]:..../\*.git mygit  将远程代码指定分支克隆到指定文件夹(mygit)中 
5. commit_id的生成 
* HEAD标记:HEAD文件是一个指向当前所在分支的引用标识符,该文件内部并不包含SHA-1值(即commit_id值),而是一个指向另一个引用的指针 
* 当执行git commit命令时。git会创建一个commit对象,并将该对象的parent指针设置为HEAD所指向的引用的SHA-1值 
* git commit的提交记录都会被git log记录下来 
* 对于HEAD修改进行的任何操作,都会被git reflog记录下来 
6. git remote prune origin  当远程分支develop被删除但本地版本库中仍然存在origin/develop时,使用该命令清除本地origin/develop 
7. 在缺省情况下,refspec会被git remote add命令所自动生成,git会获取远程上refs/heads下的所有引用,并将它们写到本地的refs/remotes/origin目录下,因此如果远程上有一个master分支,在本地就可以通过下面几种方式获取它们的历史记录 
* git log origin master  
* git log remotes/origin/master 
* git log refs/remotes/origin/master 
8. 拉取远程分支时,舍弃本地修改 
* git fetch --all                      下载代码到本地,不进行合并操作 
* git reset --hard origin/new_branch   将HEAD指向new_branch 

 

##九. 子仓库
1. submodule 
* git submodule add [email protected] mymodule   将远程仓库的内容拷贝到mymodule文件夹下作为子仓库 
* git submodule foreach git pull   拉取所有子模块的更新 
* git clone [email protected] --recursive  克隆带有子仓库的父仓库 
* git rm --cached mymodule   删除缓存区中的子仓库 
* rm -rf mymodule    删除子仓库文件 
* rm .gitmodules   删除子仓库配置文件,完成之后执行git push,远程也删除了 
2. subtree 
* git remote add origin [email protected]  
* git remote add subtree_origin [email protected] 
* git subtree add --prefix=subtree subtree-origin master --squash   将仓库subtree-origin作为origin的子仓库 
* git subtree push --prefix=subtree subtree-origin master   在父仓库的总工作区中将子仓库的更新推送到子仓库上 
  * --squash  将多个提交合并成一个提交 
 3. subtree和submodule的区别 
  * submodule子仓库的更新无法在父仓库工作区进行提交,subtree可以 

 

##十. 其他
1. git cherry-pick commit_id  快速复制另一个分支的commit 
2. git 裸库(没有工作区的仓库 )  git init --bare 
3. git gc  压缩功能 
4. git 图形化 
* gitk    brew cask install tcl  使用gitk报错"unknown-color-name-lime"的解决办法 (mac上使用homebrew安装) 
* git gui  git图形化界面 
5. git rebase     和merge功能相似,但会修改commit历史 
* git reabse master       在develop分支上合并master分支,并且分支commit历史以master为准 
* git rebase --continue   rebase过程中解决冲突后,使用git add 添加,然后执行该命令 
* git rebase --abort      终止rebase,分支会恢复到rebase开始前的状态 
* 不要对master分支执行rebase,否则会引起很多问题 
* 一般来说,执行rebase的分支都是自己的本地分支,没有推送到远程版本库 

 

 
 

你可能感兴趣的:(git命令合集)