Git 的最基础使用可以查看我的另一篇博客:使用Git在GitHub上托管程序
下面是讲 Git 使用的一些常用操作,更多请查看:git-scm教程
如何定位到历史版本
想我们在写代码时候,数次修改并提交 commit,如果在这个过程中我们后悔了,想回到当初的某一个 commit 点应该如何实现呢?
三种方式:
1】以目标 commit 为基础新创建一个分支,并切换到分支上去,这样并不破坏 base 分支上的任何提交内容,包括你目标 commit 之前的提交,以及目标 commit 之后的提交。
例子:你有一个 base 分支,上面有 1/2/3/4 四个 commit,你现在突然后悔提交了 3/4 两个 commit,或者某种原因你需要以 2commit 为基础,进行另外某个功能的开发。这时候方法 1 执行git checkout 2commitID -b div
就是以 base 分支的 2commit 为基础,创建了子分支 div,并切换到子分支上去,原来的 base 分支并没有受到影响,这时候你也就能在子分支 div 上看到你的历史代码了。
2】在当前分支上撤销目标 commit 之后的所有提交,类似于系统还原。
例子:还是上面的 base 分支有 1/2/3/4 个 commit,这时候执行git reset --hard 2commitID
就是放弃 3/4commit,回退到 2commit,这时候你也能看到历史代码,但是在 2 commit 之后的 3/4commit 就永久的丢失了。
3】以执行过的指令为目标,进行撤销操作,类似于第二种方法。
// 方法1
git log (branch) // 查看commit的ID号
git checkout commitId -b 新branch名称 // (在指定commit的基础上创建新分支)
// 方法2
git log (branch)
git reset --hard (commit id) // 版本回滚
// 方法3
git reflog
git reset --hard (command id) // 命令撤销
如果刚开始接触 git,对 git 的操作不熟悉,只习惯图形界面,可以参考:github代码如何定位到历史版本(历史commit点)
git commit 之后,想撤销 commit
写完代码后,我们一般这样:
git add --all
git commit -m "本功能全部完成"
执行完 commit 后,想撤销 commit,可以执行:
git reset --soft HEAD^
这样就成功的撤销了你的 commit,注意,仅仅是撤回 commit 操作,您写的代码仍然保留。HEAD^ 的意思是上一个版本,也可以写成 HEAD~1。如果你进行了 2 次 commit,想都撤回,可以使用 HEAD~2。
参数说明:
-
--mixed
意思是:不删除工作空间改动代码,撤销 commit,并且撤销
git add --all
操作。这个为默认参数,git reset --mixed HEAD^
和git reset HEAD^
效果是一样的。 -
--soft
不删除工作空间改动代码,撤销 commit,不撤销 git add。
-
--hard
删除工作空间改动代码,撤销 commit,撤销 git add。注意完成这个操作后,就恢复到了上一次的 commit 状态。
补充:
顺便说一下,如果 commit 注释写错了,只是想改一下注释,只需要:
git commit --amend
此时会进入默认 vim 编辑器,修改注释完毕后保存就好了。
git 合并分支
假如我们现在在 dev 分支上,刚开发完项目,执行了下列命令:
git add .
git commit -m '提交的备注信息'
git push -u origin dev
想将 dev 分支合并到 master 分支,操作如下:
// 1.首先切换到 master 分支上
git checkout master
// 2.如果是多人开发的话 需要把远程 master 上的代码 pull 下来
git pull origin master
// 3. 然后我们把 dev 分支的代码合并到 master 上
git merge dev
// 4.然后查看状态
git status
// 5.执行提交命令
git push origin master
解决合并冲突:
有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,就会产生合并冲突。
Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。
在你解决了所有文件里的冲突之后,对每个文件使用git add
命令来将其标记为冲突已解决。 。如果你想使用图形化工具来解决冲突,你可以运行git mergetool
,该命令会为你启动一个合适的可视化合并工具。
参考: