Git基础操做,看这篇就够了

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默认编辑器

建立一个仓库

  1. 建立一个文件夹, cd 到文件夹内, 执行git init
  2. 在文件夹中建立你的工程和文件,执行 git status来查看文件状态
  3. 能够接着执行 git add 文件名 / git add . 所有文件
  4. 为了把文件提交到仓库, 咱们能够执行 git commit -m '注释'来提交
  5. 经过执行 git log 来查看提交日志, git在每次提交时都会生成一个对应的哈希值

将一个git仓库托管到GitHub

  1. 在GitHub上新建一个仓库
  2. 执行 git remote add origin github.com/GitHub用户名/仓…
  3. 执行 git push -u origin master
  4. 这时你的项目将被托管到GitHub

修改你的提交

在现实生活中咱们可能会在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

建立分支, 使用分支来解决Bug和开发需求

在实际开发中, master分支的代码必定是最后通过审核验证,不会出问题的代码, 在开发中或者修复bug时, 咱们最好是经过建立的分支来进行代码的管理;app

  • 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上来;ide

  • 首先咱们要肯定本身已经在master分支上
  • 执行合并操做 git merge 分支名,这时 git会打开默认编辑器, 让咱们对此次合并作一个说明
按照咱们笔记的案例, 咱们应该执行
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
        }
    }
    
复制代码

冲突解释:

  • <<<<<<< 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上的工做;

复制代码
相关文章
相关标签/搜索