Mac安装Git的三种方式
- 安装 Xcode Command Line Tools
- 在Git官网下载git客户端
- 执行 brew install git
配置git
git config —global user.name 'Ying'
git config —global user.email 'xxx@email.com'
git config —global core.editor 'vim'
- --global : 表示全局配置
- user.name 和 user.email用于设置用户名和邮箱, git会使用这些信息记录各种操作
- core.editor 用于设置git默认编辑器
创建一个仓库
- 创建一个文件夹, cd 到文件夹内, 执行git init
- 在文件夹中创建你的工程和文件,执行 git status来查看文件状态
- 可以接着执行 git add 文件名 / git add . 全部文件
- 为了把文件提交到仓库, 我们可以执行 git commit -m '注释'来提交
- 通过执行 git log 来查看提交日志, git在每次提交时都会生成一个对应的哈希值
将一个git仓库托管到GitHub
- 在GitHub上新建一个仓库
- 执行 git remote add origin github.com/GitHub用户名/仓…
- 执行 git push -u origin master
- 这时你的项目将被托管到GitHub
修改你的提交
在现实生活中我们可能会在Git操作时出现错误, 所以回撤你的提交是必备技能
我们和别人共享代码
如果我们已经把代码add 并且commit,并且push进仓库, 我们只能修改代码, 并且执行 add 和 commit操作来修复错误
自己本地管理代码时
我们可以使用 git reset 来撤销本次错误的提交,然后修改后再提交
我们可以执行
git reset --soft ae960b6382412a8290314168bbf8c67520732591(通过日志找到上次提交的版本对应的哈希值)
git reset --soft表示撤销本次提交,但是保留这次提交后对文件的修改
我们也可以执行
git reset --hard ae960b6382412a8290314168bbf8c67520732591
git reset --hard操作虽然会撤销这次提交, 但是它不会保留你在上次提交后继续写的代码,而是彻底回到了上次提交的版本,所以在平时我们是不会用这个命令的
创建分支, 使用分支来解决Bug和开发需求
在实际开发中, master分支的代码一定是最后经过审核验证,不会出问题的代码, 在开发中或者修复bug时, 我们最好是通过创建的分支来进行代码的管理;
- git branch 来创建一个分支,分支的名称通常是反应这个分支的用途
例如创建一个feature-about分支, 用来进行需求的开发
git branch feature-about
- git checkout 是将代码从master分支切到其他分支
将分支切换到 feature-about分支
git checkout feature-about
- 创建和切换分支我们也可以通过更简单的操作来一起完成
这个操作 和 git branch 分支 + git checkout 分支 效果完全一致
git checkout -b feature-about
- 当我们在分支上完全写好代码,进行 add . 和 commit 提交之后, 我们可以回到master分支,然后更新master分支
git checkout master
git add .
git commit -m '提交纪录说明'
在执行完上面的操作后, master和feature-about是两个平行的时间线了
合并分支
我们在分支上的代码已经全部经过测试,并且准备发布后, 我们自然要把分支的代码合并到master上来;
- 首先我们要确定自己已经在master分支上
- 执行合并操作 git merge 分支名,这时 git会打开默认编辑器, 让我们对这次合并做一个说明
按照我们笔记的案例, 我们应该执行
git merge feature-about
这时我们执行git log, 就能看到合并成功,以案例为准
执行
git log
会看到
commit + 提交版本的哈希值id + (HEAD -> master, feature-about)
此时, 两个分支时间线上的行为, 以发生时间为序合并到了一起
删除分支
现在, 分支就没有存在的意义了, 我们可以执行 git branch -d 分支名 把它删掉就好了
删除分支
git branch -d feature-about
处理分支合并时的冲突
出于某种原因, 我们经常会出现在两个分支上修改了同一处代码, 这时会产生冲突, 一般需要我们解决冲突后合并, 也可以取消这次合并;
创建一个分支, 并且切换到分支上
git checkout -b fixbug/doSomething
修改代码.....
执行git操作
git add .
git commit -m 'finish fix bug'
回到master
git checkout master
修改在fixbug/doSomething修改的相同地方的代码.....
执行git操作
git add .
git commit -m 'finish code change'
合并代码
git merge fixbug/doSomething
//此时,因为合并导致的冲突出现
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.backgroundColor = UIColor.red
AF.request("https://www.geekbang.org/").response {
response in
<<<<<<< HEAD
debugPrint("这里打印response")
=======
debugPrint("response -- \(response)")
>>>>>>> fixbug/doSomething
}
}
冲突解释:
- <<<<<<< HEAD 到 ======= 之间的代码表示当前分支的代码
- ======= 到 >>>>>>> fixbug/doSomething之前的代码表示在 fixbug/doSomething分支上做的事
- 这个时候就需要我们自己做决定要留下哪个分支的代码, 然后将另外的代码和这些特殊符号删除
在删除代码后继续执行
git add .
git commit -m '注释说明'
这样, 合并冲突就轻而易举的解决了
stash临时缓存代码
之前我们说分支可以处理我们平时的功能开发和bug修复,当我们需要遇到突发情况在master分支修改代码时, 先提交我们在分支代码, 然后切回master, 在master上修改代码后再切换回分支继续写我们的代码; 但是这都是理想状态,在我们工作中, 可能当我们需要去master修改代码时, 分支的代码还不具备被提交的代码质量, 这时我们就需要用到stash缓存了
模拟 stash的使用
我们新建一个目录
执行 git init
然后创建一个index.md文件
然后执行
git add .
git commit -m '注释'
然后创建分支
git checkout -b feature-about
然后在这个分支上 创建一个文件 git-stash.md文件
假设我们现在要回到master上修改东西,但是git-stash文件里的内容我们还不能提交, 如果现在我们回到master分支
执行
git status
会看到
Untracked files:
(use "git add <file>..." to include in what will be committed)
git-stash.md
nothing added to commit but untracked files present (use "git add" to track)
<!--
但我们目前还不能把这些改变提交到 master上, 通常情况是我们要回到 feature-about分支,并且提交代码, 然后再回到master分支来修改东西;
在修改完东西后回到 feature-about分支,
执行 git log
然后执行
git reset --soft 之前的提交版本的hash值回到当前提交的时间点上,继续代码开发, 但略显麻烦
-->
我们可以用git stash 临时缓存代码
如果我们此时执行 git stash
我们可能会看到 No local changes to save;
what?, 这是什么鬼
这是因为git-stash.md 还是Untracker状态, 并没有进入索引区, git stash是将索引区转存起来, 所以我们需要先将其添加进索引区
所以应该执行
git add .
git stash
这时,才是正确的,成功将git-stash.md文件暂缓在 feature-about分支了
此时我们回到 master分支
git checkout master
我们再执行
git status
我们将在master分支看不到在分支 feature-about上的git-stash.md 文件的改动了
此时我们就可以在master上修改自己的需求,在完成后回到feature-about分支
执行
git stash list 查看缓存
我们可以执行
git stash apply stash{0}来恢复代码
我们也可以执行
git stash pop stash{0}来恢复代码并且清除缓存
场景分析:
假如我们在master分支上改好代码后,但由于操作失误,删除了 feature-about分支, 我们怎么办?
我们在master分支上
执行 git stash list会发现在feature-about分支上的stash还是存在的
此时,我们执行
git stash pop 现将缓存恢复到 master分支
然后执行
git stash branch feature-about git会用缓存的内容重新创建 feature-about 分支, 继续之前在feature-about上的工作;