git
指令,以及常见的问题Q&Agit init
这个目录变成Git可以管理的仓库git clone
拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改git remote add origin ***.git
添加远程仓库地址git remote rm origin
删除添加的远程地址git pull
命令用于从远程获取代码并合并本地的版本基本用法:
git pull <远程主机名> <远程分支名>:<本地分支名>
例如执行下面语句:
git pull origin master:brantest
将远程主机origin的master分支拉取过来,与本地的brantest分支合并。
如果远程分支是与当前分支合并,则冒号后面的部分可以省略:
git pull origin master
git branch
可以查看本地的所以分支
git branch -d dev
可以删除本地的dev分支(注意要切换到其他分支后再删除)
git checkout dev
可以切换到指定dev分支,-b选项可以创建并切换到指定dev分支
git push -u origin dev
命令将本地的dev分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了
git push origin
将当前分支推送到origin主机的对应分支
git push origin --delete
暂存区:git add
之后commit之前存在的区域;工作区:git commit
之后存在的区域;远程仓库:git push
之后;
拉取项目代码(最便捷的直接通过
clone
)新建一个空文件夹(注意:文件夹需命名为英文,否则可能会出错)
git clone '复制项目上的链接' (最好通过SSH拉取代码)
此时就会在当前文件夹内出现该项目文件,然后 cd 进去执行其他操作即可
第二种,创建
git
仓库后拉取代码(或者通过download项目压缩文件)第一步,初始化
git
仓库git init
第二步,添加远程仓库地址
git remote add origin [email protected]:SS/SOC/soc_workflow_webui.git
第三步,拉取仓库代码
git pull origin master
此时的效果与 git clone 一致
第一步,基于当前小队分支下,创建并切换到个人分支(注意:分支命名一般以姓名缩写拼接小队分支)
git checkout -b hwc_team_dev(个人姓名加小队分支)
可能有些分支是以
ci
结尾的如team_dev_ci
,注意创建个人分支时请将_ci
给去掉,因为有些仓库对于ci
结尾的分支做了保护,会导致代码推送不成功第二步,查看是否切换到了自己的分支
git branch
第三步,查看当前文件的状态
git status
第四步,可以将修改的文件加入到暂存区
git add . (将所有修改的文件都加入暂存区) git add <file> 将指定文件加入到暂存区
第五步,将暂存区的内容添加到本地仓库
`git commit -m "message"`
commit
内容规范
- feat: 一个新特性
- fix: 一次 bug 修复
- update: 既不属于新特性又不是 bug 修改的代码修改
- docs: 只是对文档进行修改
- style: 不影响代码本身含义的代码风格修改 (white-space, formatting, missing semi-colons, etc)
- perf: 性能优化
- test: 添加或修改测试用例
- build: 修改构建工具 (example scopes: gulp, broccoli, npm)
- ci: 修改自动化脚本 (example scopes: Circle, BrowserStack, SauceLabs)
- revert: 回滚提交
- WIP: 功能还在开发中,表示其还未准备好可以接受合并
第六步,将本地的分支版本上传到远程并合并
git push -u origin dev(个人分支)
第一次通过 -u 设定了 origin 为默认主机后,后面只需通过
git push
即可将本地分支推送到远程注意:
如果没指定远程主机,直接
git push
命令行会告诉你通过git push --set-upstream origin dev
来强制绑定远程分支为默认分支推送,后续
git push
也可以不用指定主机
git branch test
git checkout test
git checkout -b test
git checkout test
; git merge master
git branch -d test
git cherry-pick commitID
,可以复制一个特定的提交到当前分支git stash
git stash
将当前分支的所有修改(包括暂存区)先储藏起来;然后就可以切换到其它分支原理:
将本地没提交的内容(git commit
的内容不会被缓存 但git add
的内容会被缓存)进行缓存并从当前分支移除,缓存的数据结构为堆栈,先进后出
在其它分支工作完成之后,首先切换回原来的分支,然后使用git stash list
命令查看
可以使用git stash apply
恢复之前储藏的工作现场,再使用git stash drop
删除掉储藏的内容
也可以直接用git stash pop
恢复并删除内容
具体指令:
1、保存当前分支修改(若未指定提交信息,而这条缓存名称为最新一次提交的commit -m的内容,如果没有本地提交则是拉远程仓库是的commit内容)
git stash 解释:会把所有未提交的修改(包括暂存的和非暂存的)都保存起来 git stash save "messeag" 解释:会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,并增加说明 git stash save -u "messeag" 解释:会把所有未提交的修改(包括1.暂存的;2.非暂存的;3.新加入的代码文件:untracked files)都保存起来,并增加说明
2、stash指定的文件
1.多个文件 git stash push <file1> <file2> <file3> [file4 ...] 2.单个文件 git stash push -m "message" <file> 解释:指定单文件缓存,并增加说明
3、查看stash
git stash list 解释:在使用git stash apply命令时可以通过名字指定使用哪个stash,默认使用最近的stash(即stash@{0})
4、查看指定stash的diff
git stash show stash@{number} 解释:查看指定stash的diff,后面可以跟着指定那个stash,默认使用最近的stash(即stash@{0}) git stash show -p stash@{number} 解释:在该命令后面添加-p或--patch可以查看特定stash的全部diff
5、重新应用缓存的stash
git stash pop 解释:这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下 git stash apply 解释:将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝
6、移除
git stash drop stash@{0} 解释:删除指定的stash git stash clear 解释:删除所有缓存的stash
git add
之后commit之前存在的区域;工作区:git commit
之后存在的区域;远程仓库:git push
之后;git add
,撤销直接文件的更改git checkout <fileName> 撤销并切换到指定文件 git checkout -f <fileName>
作了修改,并且已经 git add
,但还没 git commit
:
git reset HEAD filename
/git reset HEAD
;此时修改只存在于工作区,变为了 “unstaged changes”;作了修改,并且已经 git commit
了,想撤销这次的修改:
git revert commitID
. 其实,git revert
可以用来撤销任意一次的修改,不一定要是最近一次git reset --hard commitID
/git reset --hard HEAD^
(HEAD表示当前版本,几个^表示倒数第几个版本,倒数第100个版本可以用HEAD~100);
--hard
:强制将暂存区和工作区都同步到指定的版本git reset
和git revert
的区别是:reset是用来回滚的,将HEAD的指针指向了想要回滚的版本,作为最新的版本,而后面的版本也都没有了;而revert只是用来撤销某一次更改,对之后的更改并没有影响git push -f
提交到远程仓库先在本地主分支拉最新的代码然后再合并到个人分支,解决掉冲突后再提交
第一步,git checkout 主分支
切换到主分支
第二步,git pull
拉取远程主分支最新代码到本地合并
第三步,git checkout 个人分支
切换回个人分支
第四步,git merge 主分支
,--no-ff
参数 :意为强行关掉fast-forward,在使用这种方式后,分支合并后会生成一个新的 commit
随后解决掉冲突的内容后,再提交代码即可
commit
信息开发中,由于没习惯按规范提交的 commit
,每次不小心提交后才意识到注释写错了
通过
git commit --amend
进入git操作面板最上方的就是
上次commit
的信息按
insert
进行插入,将信息更改为符合规范的信息后,按Esc
退出,然后键入:wq
保存退出然后再通过
git log
查看最近的提交记录可以看到,最近的
commit
信息已经更改若是相同步远程分支,则再通过
git push -f
强制同步本地信息即可
开发过程中,频繁更改代码,然后更改一次就提交一次,造成了很多提交记录(这里推荐小幅度更改使用,--amend --no-edit
没有提交记录)
但是我只想保留一个提交记录,那就可以使用 git rebase
合并多余的提交记录
第一步,
git rebase -i HEAD~(n) / git reabse -i commitID
n代表你要向前合并多少次提交,或者指定要合并到commitID
这里要合并最后三个
git rebase -i HEAD~3
选择 pick 操作,git会应用这个commit,以同样的提交信息(commit message)保存提交
选择 reword 操作,git会应用这个commit,但需要重新编辑提交信息
选择 edit 操作,git会应用这个commit,但会因为amending而终止
选择 squash 操作,git会应用这个commit,但会与之前的提交合并
选择 fixup 操作,git会应用这个commit,但会丢掉提交日志
选择 exec 操作,git会在shell中运行这个命令
选择 drop 操作,git会移除此次提交
一般选择p/s
,在此处需要保留第一个提交信息,所以第一个为p
,剩下两个为s
然后按
Esc
,键入:wq
保存退出然后此时会弹出另一个
git
操作框,将你不需要保留的commit
信息在前面加上 # 即可然后保存退出,此时再查看提交信息,就剩下一个啦
备注:
若有冲突,则解决完冲突,
git add .
然后再,
git rebase --continue
若是出错, 则可以通过
git rebase --abort
取消合并重新操作最后可以
git push -f
同步到远程仓库
最新的一次提交是解决了代码冲突后的合并提交信息,但是我想将后三个提交的信息给整成一个提交,我尝试使用了 git rebase -i HEAD~3
会发现合并的信息并不会显示,当时找了很多办法也没有解决,所以对于此我的理解为,合并把主分支的指针指向了当前指针,该合并产生的更改信息是不可合并到其他提交里