1、提交与标签
1、已准备了本地仓库gitTraining,并在master分支进行了三次提交:
第一次提交:添加了helloGit1;
第二次提交:添加了helloGit2;
第三次提交:添加了helloGit3。
现在发现,helloGit3内容有错误,需要撤销第三次提交,即将HEAD指向第二次提交。
cd gitTraining
git revert HEAD
2、已准备了本地仓库gitTraining,并在master分支进行了三次提交:
第一次提交:添加了helloGit1;
第二次提交:添加了helloGit2;
第三次提交:添加了helloGit3。
现在发现,helloGit3、helloGit2内容均有错误,需要撤销第三次、第二次提交。即将HEAD指向第一次提交。
需要选择–hard模式。
#进入gitTraining
cd gitTraining
#请在下方Begin至End星号线内填写git命令以回到第一次提交的版本
#********** Begin **********#
git reset --hard HEAD^^
#********** End **********#
3、如果只是工作区有了修改,则可以直接使用git checkout进行撤销,具体操作如下:
git checkout -- hello
通过这种方式,就可将hello文件自上个commit之后,尚未add进暂存区的修改丢弃。
4、已有本地仓库,错误地add了helloGit,但是要保存在工作区,即只从版本库中去除
#进入gitTraining
cd gitTraining
#请在下方Begin至End星号线内填写git命令以丢弃helloGit的修改
#********** Begin **********#
git rm --cached helloGit
git commit -m "删除helloGit"
#********** End **********#
5、在commit之后,可以为最近一次提交打上标签
#请在下面的Bein/End星号线内填写Git命令为最近一次提交打上标签v1.0
#********** Begin **********#
git tag v1.0
#********** End **********#
6、标签的推送
推送指定标签
推送指定标签到远程仓库的Git命令如下:
git push 远程主机名 tag名
其中,远程主机名为远程Git版本库对应的主机名,tag名为准备推送的标签名。
该命令使用示例如下:
git push origin v1.0
该语句表示将v1.0标签,推送到主机名为origin对应的远程仓库。
推送全部标签
推送指定标签需要用到:
git push 远程主机名 --tags
其使用方法如下:
git push origin --tags
其中origin为远程主机名,这样就能将全部标签推送至远程仓库。
8、删除标签
删除本地标签,需要用到的命令格式为:
git tag -d 标签名
具体使用方法示例如下:
git tag -d v1.0
2、解决冲突
树冲突
方法文件名修改造成的冲突,称为树冲突。比如,A用户把文件C改名为A,B用户把文件C改名为B,那么B合并这两个提交时,就会出现冲突:
CONFLICT (rename/rename): Rename “C”->“B” in branch “HEAD” rename
Automatic merge failed; fix conflicts and then commit the result.
此时如果使用git status查看版本库的状态,会得到如下提示信息:
You have unmerged paths.
(fix conflicts and run “git commit”)
(use “git merge --abort” to abort the merge)
Unmerged paths:
(use “git add/rm …” as appropriate to mark resolution)
added by them: A
added by us: B
both deleted: C
no changes added to commit (use “git add” and/or “git commit -a”)
树冲突产生的原因是,我们将同一文件名,在不同操作中,修改为不同的名字。
解决冲突
内容冲突
当产生内容冲突时,如果你打开冲突发生的文件,你会在冲突区域发现类似于下面的内容:
<<<<<<< HEAD
Learning English is easy or simple
=======
Learning English is easy & simple
>>>>>>> develop
这个就是我们上面所举的内容冲突的例子,冲突文件的内容。从中可以看到<<<<<<< HEAD与=======包括的是我们当前分支的内容,而=======和>>>>>>> develop
之间的则是需要合并过来的内容,为了解决冲突我们可以手动解决这些冲突,也可以使用图形化工具帮助解决。如果以手动方式解决,我们可以编辑冲突区域内容为我们想要的内容,比如将其修改成如下内容:
Learning English is easy and simple
然后再执行git add和git commit操作提交,这样就能将冲突解决了。
即解决冲突的一般过程为:
手动编辑冲突区域;
执行git add,将编辑提交到暂存区;
执行git commit,将编辑提交到本地仓库以解决冲突。
树冲突
解决树冲突时,对于上面示例中的树冲突,如果最终决定采用文件B,我们可以采用如下方式解决:
git rm A
git rm C
git add B
git commit
即从本地仓库中删除A和C文件,然后再添加B文件并最终提交。
强制推送
git push 远程主机名 本地分支名:远程分支名 -f
始终牢记:先本后远,本立而道生
3、gitignore
在这个文件里写入一些需要不提交的文件。
# 忽略指定文件
HelloWrold.class
# 忽略指定文件夹
bin/
bin/gen/
# 忽略.class的所有文件
*.class
# 忽略名称中末尾为ignore的文件夹
*ignore/
# 忽略名称中间包含ignore的文件夹
*ignore*/
4、合并分支
具体的,以将远程develop分支合并到远程master分支为例,操作过程如下:
获取远程develop分支到本地分支(如develop分支)。如果本地已经有分支对应远程develop分支,则可以直接在该分支上执行pull操作或者fetch/merge操作,以获取远程最新内容。否则,可以新建分支跟踪远程develop分支,并获取最新内容到本地;
切换到master分支,并获取远程master分支的最新内容到本地;
将本地develop分支合并到本地master分支;
将本地master分支推送到远程master分支。
以合并远程develop分支到远程master分支为例,其具体操作步骤如下:
#切换到develop分支
git checkout develop
#获取远程develop分支的内容到本地
git pull origin develop:develop
#切换到master分支
git checkout master
#拉取远程master分支内容到本地
git pull origin master
#合并本地develop分支到master分支
git merge develop
#将合并后的分支推送到远程master分支
git push origin master:master
5、简单的rebase操作
本地版本库gitTraining,并创建了两个分支master和develop,且当前处于develop分支。并且,develop分支是从master分支,checkout出去的分支。
将develop变基到master分支。
#进入本地gitTraining版本库
cd gitTraining
#请在下方Begin/End星号线内填写Git命令以完成rebase操作
#********** Begin **********#
git rebase master develop
#********** End **********#
6、完整demo:搭建一个自己的git工作区
#配置Git
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
#进入/tmp目录
cd /tmp
#请在下方Begin/End星号线内填写git命令以初始化educoder.git仓库
#********** Begin **********#
git init --bare educoder.git
#********** End **********#
#设置别名
#请在下方Begin/End星号线内填写git命令为系统设置全局别名
#********** Begin **********#
$ git config --global alias.st status
#为checkout设置别名co
$ git config --global alias.co checkout
#为commit设置别名ci
$ git config --global alias.ci commit
#为branch设置别名br
$ git config --global alias.br branch
删除所有别名:
删除所有别名用到的命令为:
git config [--global] --remove-section alias
其中,--global是可选参数,加上这个参数也将本主机所有git仓库下的别名都删除,不加这个参数则仅删除本仓库下的别名。
删除指定别名:
git config [--global] --unset alias.你的别名
同样的,--global也是一个全局参数。如果要删除本主机所有仓库下的st别名,则可以执行以下命令:
git config --global --unset alias.st
查看别名:
如果要查看当前主机已经设置了哪些别名,则可以执行以下命令:
git config --list | grep alias
会得到类似于alias.st=status的信息,这就是说系统当前已经为status设置了别名st。
#********** End **********#