git config —global user.name 'Ying'
git config —global user.email 'xxx@email.com'
git config —global core.editor 'vim'
复制代码
在现实生活中咱们可能会在Git操做时出现错误, 因此回撤你的提交是必备技能git
若是咱们已经把代码add 而且commit,而且push进仓库, 咱们只能修改代码, 而且执行 add 和 commit操做来修复错误github
咱们可使用 git reset 来撤销本次错误的提交,而后修改后再提交vim
咱们能够执行
git reset --soft ae960b6382412a8290314168bbf8c67520732591(经过日志找到上次提交的版本对应的哈希值)
复制代码
git reset --soft表示撤销本次提交,可是保留此次提交后对文件的修改缓存
咱们也能够执行
git reset --hard ae960b6382412a8290314168bbf8c67520732591
复制代码
git reset --hard操做虽然会撤销此次提交, 可是它不会保留你在上次提交后继续写的代码,而是完全回到了上次提交的版本,因此在平时咱们是不会用这个命令的bash
在实际开发中, master分支的代码必定是最后通过审核验证,不会出问题的代码, 在开发中或者修复bug时, 咱们最好是经过建立的分支来进行代码的管理;app
例如建立一个feature-about分支, 用来进行需求的开发
git branch feature-about
复制代码
将分支切换到 feature-about分支
git checkout feature-about
复制代码
这个操做 和 git branch 分支 + git checkout 分支 效果彻底一致
git checkout -b feature-about
复制代码
git checkout master
git add .
git commit -m '提交纪录说明'
复制代码
在执行完上面的操做后, master和feature-about是两个平行的时间线了编辑器
咱们在分支上的代码已经所有通过测试,而且准备发布后, 咱们天然要把分支的代码合并到master上来;ide
按照咱们笔记的案例, 咱们应该执行
git merge feature-about
复制代码
这时咱们执行git log, 就能看到合并成功,以案例为准测试
执行
git log
会看到
commit + 提交版本的哈希值id + (HEAD -> master, feature-about)
此时, 两个分支时间线上的行为, 以发生时间为序合并到了一块儿
复制代码
如今, 分支就没有存在的意义了, 咱们能够执行 git branch -d 分支名 把它删掉就行了ui
删除分支
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
}
}
复制代码
冲突解释:
在删除代码后继续执行
git add .
git commit -m '注释说明'
复制代码
这样, 合并冲突就垂手可得的解决了
以前咱们说分支能够处理咱们平时的功能开发和bug修复,当咱们须要遇到突发状况在master分支修改代码时, 先提交咱们在分支代码, 而后切回master, 在master上修改代码后再切换回分支继续写咱们的代码; 可是这都是理想状态,在咱们工做中, 可能当咱们须要去master修改代码时, 分支的代码还不具有被提交的代码质量, 这时咱们就须要用到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上的工做;
复制代码