使用 Git 作为代码版本管理,早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送,遇到一些commit管理的问题就束手无策,或者用一些不优雅的方式解决。
Git配置系统级、全局、当前仓库用户名、邮箱的命令
git config --global user.name "Jerry Mouse"
git config --global user.email "jerry@yiibai.com"
列出Git设置
git config --list
git config -l
git init
git add a.html
git commit -m "提交文件a.html"
git revert
是用一次新的commit来回滚之前的commit,git reset
是直接删除指定的commit。git revert
是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset
是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。git checkout -b dev // 新建分支
git branch // 查看当前分支
git checkout master // 切换分支
git branch -a // 查看远程全部的分支,白色的表示本地有的,红色的表示本地没有,仅在远程存在
git merge dev // 合并分支
git branch -d dev // 删除分支
git branch -D branch_name // 本地强制删除分支
git push origin branch_name// 推到远程
1、发生冲突的文件
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
其中,git使用<<<<<<<
,=======
,>>>>>>>
标记文件中自己和别人产生冲突的部分。
在<<<<<<<
,=======
之间为自己的代码;=======
,>>>>>>>
之间为别人的代码。
如果保留自己的代码,将别人的代码删掉即可。
要注意一下,可能两个人的代码都是对的 冲突解决后提交
1、储藏更改:将当前更改的代码储藏起来,等以后恢复使用
git stash
2、恢复储藏的代码
git stash pop //恢复的同时把stash内容删掉
或者
git stash apply //恢复stash,但是stash内容并不删除
git stash drop //在上面操作的基础上,以此来删除stash
git stash list //查看全部的stash列表
3、将stash空间清空
git stash clear
4、git stash pop 和 git stash apply 区别
原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id。
1、回退至上一个版本
git reset --hard HEAD
2、回退至指定版本
git reset --hard 版本号
3、查看以往版本号(本地的commit)
git reflog
4、查看各版本号及信息(所有的commit:本地commit + 其他同事的commit)
git log
git reset
是把HEAD向后移动了一下,而git revert
是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。1、撤销修改
git checkout -- a.html
分两种情况分析:
注:一旦执行了git commit -m "*",就不能再使用上面的命令回退。
1、第一步:
git reset --hard 版本号 //本地回退到指定的版本
2、第二步:
git push -f origin dev //将远程的也回退到指定版本
git fetch origin -p //用来清除已经没有远程信息的分支,这样git branch -a 就不会拉取远程已经删除的分支了
删除掉没有与远程分支对应的本地分支
从gitlab上看不到的分支在本地可以通过git branch -a 查到,删掉没有与远程分支对应的本地分支:
git fetch -p
查看远程库的一些信息,及与本地分支的信息
git remote show origin
(1). clone
git clone <版本库的网址>
git clone <版本库的网址> <本地目录名>
(2). remote
# 列出所有远程主机
git remote
# 使用-v选项,可以参看远程主机的网址
git remote -v
# 可以查看该主机的详细信息
git remote show <主机名>
# 添加远程主机
git remote add <主机名> <网址>
# 删除远程主机
git remote rm <主机名>
# 修改远程主机名称
git remote rename <原主机名> <新主机名>
(3). fetch
# 取回所有分支(branch)的更新到本地
git fetch <远程主机名>
# 取回某的特定分支的更新
git fetch <远程主机名> <分支名>
# 取回origin主机的master分支的更新
git fetch origin master
# 所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin主机的master,就要用origin/master读取。可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支
git merge origin/master
git rebase origin/master
(4). pull
# 取回origin主机的next分支,与本地的master分支合并
git pull origin next:master
# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin next
# 上面的命令实质上等同于先做git fetch,再做git merge。
git fetch origin
git merge origin/next
# 合并需要采用rebase模式
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
(5). push
# 将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建
git push origin master
# 省略了本地分支,以下等同,删除origin主机的master分支
git push origin :master
git push origin --delete master
# 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略
git push origin
# 如果当前分支只有一个追踪分支,那么主机名都可以省略。
git push
# 如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push
git push -u origin master
# 不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机
git push --all origin
# 强制推送
git push --force origin
# git push不会推送标签(tag),除非使用–tags选项
git push origin --tags