前14条在工作中会经常用到
1.如何将远程仓库克隆到本地
git clone git@*******:hisgit/his-front.git
注意如果此时你的项目是空的,要先建个页面push到远程仓库;否则没办法进行下面操作
2.产看远程分支
git branch -r
3.查看所有分支
git branch -a
4.查看本地分支
git branch
前面有*号的代表当前分支
5.合并分支
//若合并远程分支
git merge origin/分支名
//合并本地分支
git merge 分支名
6.切换分支
git checkout ***
7.创建分支
1).创建本地分支
//创建dev_l 分,支此时dev_l分支代码和dev完全一致
git branch dev_l
//创建并切换到dev_l分支,此时dev_l分支代码和dev完全一致
git checkout -b dev_l
2).然后将本地分支推送到远程
git push origin 本地分支名:远程分支名
git push origin HEAD:远程分支名
注意:如果远程已有分支,要在本地创建其对应的本地分支
git checkout --track 或者 git checkout -b如:
git checkout --track origin/dev-zhengqigit ,
git checkout -b dev-zhengqi origin/dev-zhengqi
建立分支后,默认会进到新建的分支里,
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
8.删除本地分支
git branch -d xxxxx
如果提示
error: The branch 'feature-vulcan' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
则使用 —D 做参数,强行删除
git branch -D feature-vulcan
9.删除远程分支
git branch -r -d origin/branch-name
git push origin :branch-name
git push origin --delete tag v0.7
10.从远程拉到本地
git pull origin master
git checkout --track orgin/branch_name //来在本地创建一个与 branch_name 同名分支跟踪远程分支。
11.从本地推送到远程
git push origin develope
git push --set-upstream origin branch_name //来在远程创建一个与本地branch_name 分支同名的分支并跟踪;
12.查看历史日志
git log
13.git回退版本
reset (版本撤回)
git reset 057d //回退到某个版本 057d 是版本号
git reset –hard origin/master //将本地的状态回退到和远程的一样
git reset --hard HEAD^ //回退到上一次提交的分支
git reset --hard HEAD~3 //回退到n次提交之前
回退完成后只是本地分支被回退了,需要把本地回退代码推到远程,注意得加f,表示强制推送
git push -f
revert(撤消操作)
git revert的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本。
git revert HEAD~3://丢弃最近的三个commit,把状态恢复到最近的第四个commit,并且提交一个新的commit来记录这次改变。
git revert -n master~5..master~2://丢弃从最近的第五个commit(包含)到第二个(不包含),但是不自动生成commit,这个revert仅仅修改working tree和index。
也就是说 git reset 会失去后面的提交,而 git revert 是通过反做的方式重新创建一个新的提交,而保留原有的提交。
- git reset 适用于:如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
- git revert 适用于:如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
如果当你回退到旧版本后,但又想回退到新版本,那么Git提供了一个命令git reflog用来记录你的每一次命令,那么你通过此命令就会找到新版本的版本号了
$ git reflog
14.当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场,例如:
项目正在test分支更新版本我们疯狂的写bug,突然没更新前的版本出bug了(意料之中),此时呢我们要切换到master分支去改bug。此时此刻我test分支上修改的文件还不想提交,但是切换分支会提示我错误有文件未提交,这种情况下就需要用到
git stash
-
此时在test分支直接输入git stash将代码存储起来
-
接下来我们就可以随意切换分支了,当切回来的时候,我们想恢复刚刚存储的文件,则需要输入
git stash list
命令去查看我们“存储”的列表。
-
我们开始恢复,输入
git stash apply stash@{0}
(指定恢复版本)或者
git stash apply
直接恢复最后一次存储内容,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除
开始恢复的另一种方案,输入
git stash pop
命令,恢复的同时把 stash 存储列表的内容也删了。
15.已经add的文件,在gitignore中无效,删除重新add
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
16.使用git在本地创建一个项目的过程
$ makdir ~/hello-world //创建一个项目hello-world
$ cd ~/hello-world //打开这个项目
$ git init //初始化
$ touch README
$ git add README //更新README文件
$ git commit -m ‘first commit’ //提交更新,并注释信息“first commit”
$ git remote add origin git@github.com:defnngj/hello-world.git //连接远程github项目
$ git push -u origin master //将本地项目更新到github项目上去
17.如果是develop往非develop提交的时候,要写明,是哪到哪。
$ git push origin develop:master
18.在master分支上修复了bug后,这个bug其实在当前dev分支上也存在。那怎么在dev分支上修复同样的bug?
同样的bug,要在dev上修复,我们只需要把0990e8e BUG这个提交所做的修改“复制”到dev分支。注意:我们只想复制0990e8e BUG这个提交所做的修改,并不是把整个master分支merge过来。
为了方便操作,Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支:
git cherry-pick 0990e8e
19.标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
敲命令git tag <name>就可以打一个新标签:
$ git tag v1.0
默认标签是打在最新提交的commit上的,如果你要打在之前的commit上,方法是找到历史提交的commit id,然后打上就可以了。
$ git log --pretty=oneline --abbrev-commit
然后敲入
$ git tag v0.9 f52c633
注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息。
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
创建的标签都在本地,可以推送一个本地标签到远程,如:
git push origin <tagname>
推送全部未推送过的本地标签
git push origin --tags
删除一个本地标签
git tag -d <tagname>
删除一个远程标签
git push origin :refs/tags/<tagname> //$ git push origin :refs/tags/v0.9
20.忽略某些文件时,需要编写.gitignore;
*.py[cod]
*.so
dist
build
续忽略.pyc、.pyo、dist等文件或目录:
21.每个仓库的Git配置文件都放在.git/config文件中
22. 想批量删除branch中新加的文件(untracked files)git reset --hard不行
首先确认要删除的文件
git clean -fd -n
如果以上命令给出的文件列表是你想删除的, 那么接下来执行
git clean -f -d或者git clean -fd就可以了。
23.git删除未跟踪文件
删除 untracked files
git clean -f
连 untracked 的目录也一起删掉
git clean -fd
连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
24.修改最后一次提交
有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 --amend
选项重新提交:
$ git commit --amend