1、获取Git仓库
通常有两种获取 Git 项目仓库的方式:
- 将尚未进行版本控制的本地目录转换为 Git 仓库;
- 从其它服务器克隆 一个已存在的 Git 仓库。
两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。
- 克隆一个已存在的 Git 仓库比较简单,命令是
git clone <url>
- 初始化一个空仓库命令
git init
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。
2、提交更新
添加一个文件,把文件添加到暂存区,使用命令git add <file>...
,然后提交当前工作空间修改的内容,使用命令git commit -m "message"
或git comiit -se
git commit -m "message"
提交信息与命令放在同一行,可以直接输入提交信息
git comiit -se
会启动你选择的文本编辑器来输入提交说明
3、远程仓库的使用
- 添加远程仓库命令
git remote add <shortname> <url>
图中我初始化了一个空的bare仓并将它添加成我当前仓库的远程仓库,通过git remote -v
命令可以查看远程仓库使用的 Git 保存的简写与其对应的 URL。 - 把代码推送到远程仓库
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名>
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :develop
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
4、stash:用于临时保存和恢复修改
使用场景:项目正在develop分支更新版本,突然已上线的版本出bug了,此时我们要切换到hotfix分支去改bug。此时此刻develop分支上修改的文件还不想提交,但是切换分支会提示错误有文件未提交。
直接输入 git stash
命令,将当前分支存起来,id为12da570
然后输入 git stash list
命令去查看我们“存储”的列表
接下来可以随意切换分支,在其他分支任务完成后可以再切回来,我们想恢复刚刚存储的文件,继续被打断的工作。
恢复的方式有两种:
方法一:用 git stash pop
命令,恢复的同时把 stash 存储列表的内容也删了。这时候再执行 git stash list
命令,id 为 12da570的储藏项目不会在列表中。
执行 git status
就会继续显示该分支上有改动未提交。
方法二:用 git stash apply
命令恢复,但是恢复后,stash内容并不删除,这时候再执行 git stash list
命令,id 为 4b6be40的储藏项目还会在列表中,你需要用 git stash drop 来删除;
注意: 如果有一个分支上多个 stash,如果需要恢复指定的 stash ,可以在命令尾部加id,如 git stash apply stash@{0} ,同样删除指定 stash 项目则执行如 git stash drop stash@{0} 。
5、撤销操作
- 漏掉文件或提交信息写错重新提交,使用命令
git commit --amend
git restore --staged <file>
将文件从暂存区撤出,但不会撤销文件的更改
git resore <file>...
将不在暂存区的文件撤销更改
6、查看提交历史
-
git log
查看所有历史提交记录
限制显示的日志条目数量,可以使用命令git log -p -num
查看分叉历史 运行 git log --oneline --decorate --graph --all ,它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况。
-
git blame <file>
以列表形式查看指定文件的历史修改记录
显示文件的每一行最后修改的版本、作者、时间
7、分支合并
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。
第一种情况:A分支的所有代码改动合并到B分支,使用git merge
删除已合并到master的iss25分支
第二种情况:只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。
$ git cherry-pick <commitHash>
例如:hotfix分支修改了bug和一些定制化功能,但是修改的bug需要提交到master分支上。
查看hotfix分支提交历史,找到修改bug的提交记录
切换到master分支,将hotfix分支修改bug的提交记录合并到master分支上
8、rebase
场景:不同分支之间的合并
分支develop开发了一些功能,并且保存提交
现在新功能开发完毕,需要将它合并到hotfix中。
首先切换到hotfix分支,然后使用merge直接合并develop分支
竟然失败了,原因很简单,两个分支修改个同一个文件产生了冲突,需要手动合并冲突,再提交:
打开文件修改完成后,通过add添加,然后commit提交
重新合并,合并成功,然后查看一下分支提交历史:
虽然合并成功了,但是合并历史分叉了,可以通过rebase合并分支:
在hotfix分支上执行:git rebase develop
这是以develop为基础,将feature分支上的修改增加到develop分支上,并生成新的版本。
失败了,通过git status查看冲突文件,有一个文件没有提交,将该文件重新提交
之前的rebase其实只是完成了一半,由于出现冲突而终止,现在冲突解决,可以通过git rebase —continue继续完成之前的rebase操作。
rebase完成,再查看一下提交历史:
提交记录已经是一条完美的直线。