Git

Git

1.创建版本库

  1. git init 把这个目录变成Git可以管理的仓库
  2. git add readme.md 把文件添加到仓库
  3. git commit -m “wrote a readme file” -m后面输入的是本次提交的说明

2.版本回退

  1. 修改readme.md内容
    git add readme.txt
    git commit -m “append GPL”
    ps: git log可以查看版本历史记录
  2. git reset –hard HEAD^
    ps: HEAD^表示上一个版本 HEAD^表示上上个版本 HEAD~100表示往上100个版本
  3. 命令行窗口还没有被关掉时,找到某个版本的commit id,也能进行回退。
    git reset –hard xxxxxxxx
    命令行窗口被被关掉时,使用git reflog查看记录的每一次命令

3.工作区和暂存区

  1. 工作区
    电脑里能看到的目录,比如gittest文件夹就是一个工作区
  2. 版本库

    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
    git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
    git add . 添加所有数据
    git commit -m “understand how stage works”

4.管理修改

  1. 对readme.txt做一个修改
    git add readme.md
    再修改readme.md
    git commit -m “git tracks changes” 提交
  2. git status
    然而,第二次修改并没有被提交,第一次修改 -> git add -> 第二次修改 -> git commit
    Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
    git diff HEAD – readme.md 查看工作区和版本库里面最新版本的区别
  3. 提交第二次修改
    第一次修改 -> git add -> 第二次修改 -> git add -> git commit

5.撤销修改

  1. git checkout – readme.md 丢弃工作区的修改
    一种是readme.md自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    一种是readme.md已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。
  2. git add后修改
    git reset HEAD readme.md 把暂存区的修改撤销掉
    git checkout – readme.md 丢弃工作区的修改

6.删除文件

  1. 先添加一个新文件test.txt到Git并且提交
    git add test.txt
    git commit -m “add test.txt”
  2. 直接在文件管理器中把没用的文件删了,或者用rm命令删除rm test.txt
    从版本库中删除该文件,那就用命令git rm删掉,并且git commit
    git rm test.txt
    git commit -m “remove test.txt”
    删错了,因为版本库里还有,所以可以把误删的文件恢复到最新版本
    git checkout – test.txt

7.远程仓库

  1. 添加远程库
    在GitHub创建一个Git仓库
    git remote add origin git@github.com:xxxxxxxx 关联
    git push -u origin master 把本地库的所有内容推送到远程库上
  2. 从远程库克隆
    git clone git@github.com:xxxxxxxxx

8.分支管理

  1. 创建与合并分支
    git switch -c dev 创建dev分支,然后切换到dev分支
    git branch 查看当前分支
    修改readme.md git add readme.md git commit -m “branch test”
    git switch master 切换回master分支
    再查看readme.md文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变。
    git merge dev 把dev分支的工作成果合并到master分支上
    git branch -d dev 删除dev分支
  2. 解决冲突
    git switch -c feature1 准备新的feature1分支
    修改readme.md
    git add readme.md
    git commit -m “AND simple” 在feature1分支上提交
    git switch master 切换到master分支
    在master分支上把readme.md进行不同修改
    git add readme.md
    git commit -m “& simple” 在master分支上提交
    这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。
    git status 查看冲突的文件
    手动修改文件解决冲突后再提交
    git add readme.txt
    git commit -m “conflict fixed”
    git branch -d feature1 删除feature1分支
    准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward
  3. Bug分支
    git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
    git switch -c issue-101
    修改Bug,然后提交
    git add readme.txt
    git commit -m “fix bug 101”
    修复完成后,切换到master分支,并完成合并,最后删除issue-101分支
    git switch master
    git merge –no-ff -m “merged bug fix 101” issue-101
    git switch dev
    git stash pop 删除stash
    复制一个特定的提交到当前分支
    git log
    git cherry-pick 4e4858db453de3da86ee2eafc2
  4. 多人协作
    git remote -v 查看远程库的详细信息
    多人协作的工作模式通常是这样:
    1. 首先,可以试图用git push origin 推送自己的修改;
    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    3. 如果合并有冲突,则解决冲突,并在本地提交;
    4. 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
      如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/
  5. 忽略特殊文件
    在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
    不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
    .gitignore也提交到Git
请作者喝瓶肥宅快乐水