赞
踩
git 清理
git clean命令用来从你的工作目录中删除所有没有tracked过的文件。
如果被删除的子文件夹中有 .git目录,那么会被忽略掉,如果想删除必须添加-f参数。
比如实例:让当前工作目录回滚到上一次提交的状况,新添加的文件也被删除掉。
# 让暂存区和工作目录把已经被跟踪的文件清理干净$ git reset --hard# 让未追踪的文件进行清理$ git clean -f
git分支管理
项目分支就是版本库的一个副本,有了分支后可以把你的工作从开发主线上分离开来, 以免影响开发主线。
创建分支:git branch 分支名字命令,切换分支的命令使用 git checkout 分支名字
$ git branch dev$ git checkout dev# -b创建分支,checkout是切换分支$ git checkout -b dev
删除分支
当一个分支完成了使命的时候,一般我们会把它删除掉。
# -d 命令是删除的意思,delete$ git branch -d hotfix
查看所有的分支
$ git branch -v dev eba9a31 update the a.txt by dev* master d47fbfb update the a.txt by master;
带*的代表是当前的分支。
合并分支就是把其他分支的代码合并到当前的分支中。git会自动将当前分支和要合并的分支找到共同的基点,然后将当前分支的所有变化和要合并分支的变化进行三方合并,并产生一个新的提交,此次提交有两个父提交。
例如操作:
# 进入主分支$ git checkout master# 合并dev分支$ git merge dev
合并分支:
ssss<<<<<<< HEAD222222223333333344444444=======devdevdevdev>>>>>>> dev
移除上面的 <<<<<<< HEAD 和 ======= >>>>>>> dev然后留下自己想要的代码就完成了冲突解决,最后add和commit一下就可以了。
完整的解决冲突的流程:
# 切换到主分支$ git checkout master# 把dev分支的内容合并到主分支$ git merge dev# 如果产生冲突后,先修改文件,去掉冲突的符号。# 最后提交修改到仓库$ git add .$ git commit -m '合并冲突'
合并过程中,随时都可以停止合并,只需要 git merge abort ,仓库和工作去会回到合并之前的状态。
$ git tagv0.1v1.3
这个命令以字母顺序列出标签;你也可以使用特定的模式查找标签,如果只对 1.8.5 系列感兴趣,可以运行:
$ git tag -l 'v1.8.5*'v1.8.5v1.8.5-rc0v1.8.5-rc1v1.8.5-rc2v1.8.5-rc3v1.8.5.1v1.8.5.2v1.8.5.3v1.8.5.4v1.8.5.5
$ git tag -a v1.4 -m 'my version 1.4'$ git tagv0.1v1.3v1.4
-m 选项指定了一条将会存储在标签中的信息。通过使用git show命令可以看到标签信息与对应的提交信息:
$ git show v1.4tag v1.4Tagger: Ben Straub Date: Sat May 3 20:19:12 2014 -0700my version 1.4commit ca82a6dff817ec66f44342007202690a93763949Author: Scott Chacon Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number
输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息。
$ git tag v1.4-lw$ git tagv0.1v1.3v1.4v1.4-lwv1.5
后期打标签
你也可以对过去的提交打标签。
$ git tag -a v1.2 9fceb02
检出标签
在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。如果你想要工作目录与仓库中特定 的标签版本完全一样,可以使用git checkout -b [branchname] [tagname]在特定的标签上创建一个 新分支:
$ git checkout -b version2 v2.0.0Switched to a new branch 'version2'
当然,如果在这之后又进行了一次提交,version2 分支会因为改动向前移动了,那么 version2 分支就会和 v2.0.0 标签稍微有些不同,这时就应该当心了。
$ git checkout experiment$ git rebase master
变基之后
远程分支的pull命令的时候的--base可以直接变基合并
$ git rebase -i HEAD~3
此时会进入vi的编辑器模式,这是需要你了解一点vi的快捷键不然没法继续操作。
pick f7f3f6d changed my name a bitpick 310154e updated README formatting and added blamepick a5f4a0d added cat-file# Rebase 710f0f8..a5f4a0d onto 710f0f8## Commands:# p, pick = use commit# r, reword = use commit, but edit the commit message# e, edit = use commit, but stop for amending# s, squash = use commit, but meld into previous commit# f, fixup = like "squash", but discard this commit's log message# x, exec = run command (the rest of the line) using shell# d, drop = remove commit# l, label = label current HEAD with a name# t, reset = reset HEAD to a label# m, merge [-C | -c ] [# ]# . create a merge commit using the original merge commit's# . message (or the oneline, if no original merge commit was# . specified). Use -c to reword the commit message.## These lines can be re-ordered; they are executed from top to bottom.## If you remove a line here THAT COMMIT WILL BE LOST.
把最上面的pick对应改成你想要的效果,比如删除某个提交信息,则把pick改成 d为删除当前提交信息,e是修改,p默认就留下
$ git clone https://github.com/malun666/aicoder_vip_doc# 本地目录会增加一个文件,就是把远程仓库下载到本地了
查看远程仓库的远程的关联信息
$ git remote -vorigin https://github.com/malun666/aicoder_vip_doc (fetch)origin https://github.com/malun666/aicoder_vip_doc (push)
origin - 这是 Git 给你克隆的仓库服务器的默认名字。origin就代表远程仓库的别名。
$ cd /path/to/gitresp$ git remote add aicoder https://github.com/malun666/aicoder_vip_doc$ git remote -v
远程分支拉取
一般先建立好远程仓库的别名后,然后用fetch命令进行拉取远程仓库的内容。
$ git fetch # 例如:$ git fetch origin dev# 下载所有的远程分支$ git fetch --all
如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。
$ git remote rename pb paul$ git remoteoriginpaul
$ git remote rm paul$ git remoteorigin
$ git remote show origin* remote origin Fetch URL: git@github.com:malun666/aicoder_egg.git Push URL: git@github.com:malun666/aicoder_egg.git HEAD branch: master Remote branches: dev tracked master tracked Local branches configured for 'git pull': dev merges with remote dev master merges with remote master Local refs configured for 'git push': dev pushes to dev (up to date) master pushes to master (up to date)
推送到远程仓库
当你想分享你的项目时,必须将其推送到上游。这个命令很简单:git push [remote-name] [branch-name]。当你想要将 master 分支推送到 origin 服务器时(再次说明,克隆时通常会自动帮你设置好那两个 名字),那么运行这个命令就可以将你所做的备份到服务器
具体语法:
$ git push <远程主机名> <本地分支名>:<远程分支名>
实例:
$ git push origin master
只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。
注意推送之前,必须先把远程分支的最新内容拉取下来合并或者变基成为最新的内容才可以推送。
设置关联,自动推送。
第一次执行推送的时候,添加 -u参数,例如:
$ git push -u origin master# 后续的推送,就直接使用 git push即可,已经关联无需再指定 origin和master
远程分支拉取与合并
拉取之前,确保当前仓库为提交完成状态。
拉取所有的远程分支:
$ git fetch --all$ git branch --all# 此时可以看到所有的远程分支和当前分支内容 aicoder* master remotes/origin/HEAD -> origin/master remotes/origin/aicoder remotes/origin/master
此时remotes开头的都是远程的分支的最新的内容,可以用merge命令进行合并分支,也可以rebase变基。
例如:
# 切换到aicoder分支$ git checkout aicoder# 合并远程的aicoder分支$ git merge remotes/origin/aicoder
以上操作都太麻烦,最简单的办法就是直接使用pull命令,是以上fetch命令和merge命令的合体:
# 获取远程的aicoder分支并与当前的aicoder分支进行合并。$ git pull origin aicoder# 如果合并的不同分支名字:最后需要用 远程分支名:本地分支名# $ git pull :$ git pull origin aicoder:master
如果合并过程中有任何的冲突,需要手动修改冲突代码,最后git add 和git commit提交。
git pull --rebase origin master# 简写git pull -r origin master# 从远程origin的master分支上拉取最新的结果并且让当前仓库依照远程仓库进行变基操作。
变基过程中可以随时进行 abort停止。
$ cat ~/.ssh/id_rsa.pubssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/ssdfsfsdfadfadfasdfasdfaslajfdaljADFASdfkasdflasjflasjdflajA23ljlsdjfaljf
把~/.ssh/id_rsa.pub文件中的内容拷贝到github的秘钥框中。如下图所示:
设置ssh key
echo "# gitlearn" >> README.mdgit initgit add README.mdgit commit -m "first commit"git remote add origin git@github.com:malun666/gitlearn.gitgit push -u origin master
在本地已有的仓库上进行关联:
git remote add origin git@github.com:malun666/gitlearn.gitgit push -u origin master
git工作流
详情请参考: Git工作流指南
进入公司后,需要问项目经理要一下公司的源码git仓库的地址,以及把自己的公钥给管理员,让他们帮你设置上权限,就可以clone项目了。本工作流比较简单,就不再概述。
# 把一个空分支推送到远程的dev分支,也就是删除远程的dev分支$ git push origin :dev
git的钩子与自动化集成
Git 能在特定的重要动作发生时触发自定义脚本。这些特定的能注册执行脚本的事件就称为钩子。
$ git config --global alias.co checkout$ git config --global alias.br branch$ git config --global alias.ci commit$ git config --global alias.st status
如果定义的别名想带上参数,那么需要对命令名加上引号。
$ git config --global alias.lf 'log --graph --oneline'# 使用:$ git lf# 等价于:$ git log --graph --oneline
原文:https://www.cnblogs.com/fly_dragon/p/10339724.html
想要获取学习实战、高并发、架构 、笔试面试资料请扫码咨询+薇薇微信
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。