Git小乌龟的安装及使用
代码里的左侧颜色标识:
红色,未加入版本控制; (刚clone到本地)
绿色,已经加入版本控制暂未提交; (新增部分)
蓝色,加入版本控制,已提交,有改动; (修改部分)
白色,加入版本控制,已提交,无改动;
灰色:版本控制已忽略文件。
1.先下载git,按照相应的系统,https://git-scm.com/downloads,然后,一直next即可完成安装
2.安装git小乌龟,https://tortoisegit.org/download/,同样的,一直next即可完成安装,但是,需要注意的是必须先安装git,在安装git小乌龟
3.安装语言包,同样是https://tortoisegit.org/download/,然后一直next即可,要先装完小乌龟在安装语言包。
右键→tortogit→setting,把language项改为中文,点击确定就可以了


git pull后如何恢复到原来的版本
git安装之后,打开cmd窗口,执行命令:git reflog 命令查看你的历史变更记录
git reset --hard HEAD@{n} (注意:n是你要回退到的引用位置)

- 找到需要回退的版本,执行命令:
git reset --hard HEAD@{n} - 如执行:
git reset --hard61a942c
git添加远程仓库地址,并初步提交代码
项目工程右击,选择Git Bash Here,
弹出命令输入窗口,也可以直接在 IDEA中,如下图

打开终端
执行以下操作
-----初始化仓库
git init
-----关联远程仓库
git remote add origin git@github.com:YotrolZ/helloTest.git 其中git@github.com:YotrolZ/helloTest.git可根据实际需要更改,如git remote add origin http://yinjunguo@172.16.120.158:18888/r/dolphinscheduler-ui.git
git add *或者git add .git commit —m"初次提交"
附:查看状态可用 git status
E:\mm\zdh>git push -u origin master------------我们第一次push的时候,
加上-u参数,Git就会把本地的master分支和远程的master分支进行关联起来,
我们以后的push操作就不再需要加上-u参数了
To https://gitee.com/xxx/xxx.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to
'https://gitee.com/xxx/xxx.git'
hint: Updates were rejected because the remote contains
work that you do
hint: not have locally. This is usually caused by another
repository pushing
hint: to the same ref. You may want to first integrate the
remote changes
hint: (e.g., 'git pull ...') before pushing again-------提示要先拉取
hint: See the 'Note about fast-forwards' in 'git push --help' for
details.
xxxx>git pull origin master
warning: no common commits
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From https://gitee.com/xxx/xxx
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
fatal: refusing to merge unrelated histories
xxxxx>git push -u origin master-------------------不可以
To https://gitee.com/xxx/xxx.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to
'https://gitee.com/xxx/xxx.git'
hint: Updates were rejected because the tip of your current
branch is behind--------提示你本地分支的版本落后(更新被拒
绝,因为您当前分支的提示落后)
hint: its remote counterpart. Integrate the remote changes
(e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for
details.
xxxxx>git push -u -f origin master-----------注 释:-f是强制推送,覆盖远程
Counting objects: 5, done.
Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (5/5), 316 bytes | 0 bytes/s, done. Total 5 (delta 0), reused 0 (delta 0) To https://gitee.com/xxx/xxx.git + b9d4e84...fb730f5 master -> master (forced update) Branch master set up to track remote branch master from origin.本地新建项目,
总计一下操作
如果想ignore这个文件:如ignore node_modules这个文件夹不进行初始化和push,按下图操作
git init关联远程仓库
git remote add origin http://yinjunguo@172.16.120.158:18888/r/dolphinscheduler-ui.git添加
git add *提交
git commit —m"初次提交"拉取
git pull origin master上传
git push -u -f origin master或者
$ git init
$ git remote add origin http://yinjunguo@172.16.120.158:18888/r/dolphinscheduler-ui.git
idea配置git,查看git代码&拉取git项目至本地
1、点击file,右键选择setting

选择本地git安装路径


弹出如下框,并进行信息输入

其中URL根据实际GIT服务器地址填写,Directory填写的值为项目拉取到本地IDEA的路径,点击克隆Clone即可
项目已经拉取到本地,然后点击open,打开项目的pom.xml,然后选择作为项目打开即可
项目拉下来后,需要配置maven

所依赖的项目也拉到本地后,发现有很多依赖的jar包找不到,如图所示 此时点击一下 install 安装一下即可

git fetch 和 git pull区别
git在本地会保存两个版本的仓库,分为本地仓库和远程仓库。
1、本地仓库就是我们平时 add、commit 的那个仓库。
2、远程仓库可以用git remote -v查看(这里的远程仓库是保存在本地的远程仓库,等同于另一个版本,不是远程的远程仓库)。
说说 fetch 和 pull 的不同:
fetch 只能更新远程仓库的代码为最新的,本地仓库的代码还未被更新,我们需要通过 git merge origin/master 来合并这两个版本,你可以把它理解为合并分支一样的。
pull 操作是将本地仓库和远程仓库(本地的)更新到远程的最新版本。
如果想要更加可控一点的话推荐使用fetch + merge。
PUSH之前必须注意之处
1.先提交要更改或者新增的文件,然后占存
目的使本地工程代码和远程工程代码一样,占存相当于把本地文件修改的东西剪出来,使本地代码和远程服务端代码一样
2.pull,从远程拉取最近的代码到本地
3.还原占存的代码,
当相于把之前修改和增加的代码剪出来的东西在粘贴在这里,如果PULL以后本地文件(相当于自己修改的代码要占存的同一个文件)有更新的,提交的时后会提示你冲突合并,自己一一解决冲突合并,如果PULL以后本文件更新的地方,不在占存剪出来的同一个地方,直接会自动合并,不存在冲突,此 还原占存的代包含所有不同的文件,和提交部分更改和新增的不一样
4.提交
5.PUSH或者同步
GIT版本树分析
在使用 Git 的进行代码版本控制的时候,往往会发现在 log 中出现 "Merge branch 'master' of ..." 这句话,如下图所示。日志中记录的一般为开发过程中对代码的改动信息,如果出现过多例如上述描述的信息会造成日志的污染。
阅读了一些外文的博客,下面就来一探究竟。
产生原因分析
当多人合作开发一个项目时,本地仓库落后于远程仓库是一个非常正常的事情,可参考下图。
A-B-C(master)
\
D(origin/master)
具体情境如下:
- 我当前拉取的远端版本为
B,此时修改了代码,并在本地仓库 commit 一次,但并未 push 到远端仓库。 - 另一位开发者在
B的基础上,同样 commit 了一次并 push 到远端仓库。那么这个时候,我再 push 自己的代码就会发生错误,如下。
To github.com:maoqyhz/usegit.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:maoqyhz/usegit.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
这个时候我们会选择,先 pull,再 push。Ok,push 成功,但是此时我们查看 log 就会发现除了我们自己提交的那条日志之外,会多出一条 "Merge branch 'master' of ..."。
那么,为什么会出现这种现象呢?其实是与 Git 的工作原理有关,对 Git 比较了解的人应该会知道,无论是 pull、push 亦或是 merge 操作,其实背后都是有很多的不同的模式的。
在进行 pull 操作的同时,其实就是 fetch+merge 的一个过程。我们从 remote 分支中拉取新的更新,然后再合并到本地分支中去。
- 如果 remote 分支超前于本地分支,并且本地分支没有任何 commit 的,直接从 remote 进行 pull 操作,默认会采用
fast-forward模式,这种模式下,并不会产生合并节点,也就是说不会产生多余的那条 log 信息 - 如果想之前那样,本地先 commit 后再去 pull,那么此时,remote 分支和本地会分支会出现分叉,这个时候使用 pull 操作拉取更新时,就会进行分支合并,产生合并节点和 log 信息。这两种状态分别如下图所示:
# fast-forword
A-B-D(origin/master)
\
C'(master)
# merge
A-B-C-E(master)
\ /
D(origin/master)
如何避免
为了去除自动生成的 log 信息,有以下几种解决方案:
- 如果你使用的是 Git Bash,直接使用
git pull --rebase。如果拉取不产生冲突,会直接 rebase,不会产生分支合并操作,如果有冲突则需要手动 fix 后,自行合并。 - 如果使用的是 GUI,例如 TortoiseGit,可以先 fetch,再手动 rebase 就可以了。
关于 rebase 和 merge
关于什么时候使用 rebase,什么时候使用 merge,开发者总结了几条规则:
- 从 remote 分支拉取更新到本地时,使用 rebase。
- 当完成 bug 修复或新功能时,使用 merge 将子分支合并到主分支。
- 没有人应该 rebase 一根共享的分支。
有关这两者具体的操作,可以参考我在文章最后列出的博客。

