git

分布式版本控制系统

  • 分布式:不止服务端,每个客户端本地也存在代码仓的完整镜像。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。

文件本地状态

  • 未跟踪 untracked
  • 已提交(无修改) unmodified 数据已经安全的保存在本地数据库中。
  • 已修改 modified 表示修改了文件,但还没保存到本地数据库中。
  • 已暂存 staged 表示对一个已修改文件的当前版本做了标记,使之包含在下次commit中。
git_第1张图片

工作区域:Git 仓库、工作目录以及暂存区域。

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照存储到本地 Git 仓库。

指令

  • 查看配置 git config ([key])
  • 帮助 git help
  • 查看状态 git status 查看是否有新的未追踪文件或发生修改的已追踪文件
    git status -sgit status --short 更简约的格式输出
  • 删除文件 git rm [file] 删除工作目录中的文件,且不需要再次git add。如果对已经加入暂存区(git add)但尚未提交的文件,则存在安全特性,需要git rm [file] -f进行删除。git rm --cached [file]则在本地保留文件,只是从git仓库和暂存区删除。
  • 查看提交历史 git log ,存在各种筛选/排序/显示方式
  • 替换提交 git commit --amend 会覆盖上一次commit,只留下一条记录
  • 取消暂存 git reset HEAD (安全,不会改变文件)
  • 丢弃修改 git checkout -- [file](非常危险)

初始化本地git仓库的两种方式

  1. 在文件夹中git init 将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件
    若是在已经存在文件的文件夹中执行git init,则还需要追踪并提交
git add .
git commit -m 'initial project version'
git remote add origin [git仓库地址]//用于关联远程仓库
git push -u origin master//如果仓库里已有ReadMe.md而本地没有,则用-f替换-u
 git push --set-upstream origin master
  1. 克隆现有的仓库到本地 git clone [url] ([newName])
    例如git clone https://github.com/libgit2/libgit2 mylibgit

一次完整的git提交

  1. 建立或克隆一个git仓库,并将其或者在其基础上创建工作目录
  2. 在工作目录中添加或修改文件
  3. 将文件的修改添加至暂存区中
    git add [target] 开始跟踪新文件,或把已跟踪的文件放到暂存区,或把有冲突的文件标记为已解决状态等。git add .即添加所有(但不包括删除)。git add -A即添加所有(包括删除)。git add -u只添加已经被add的文件(即tracked file),不会提交新文件。
  4. 提交更新,将git暂存区中的文件commit至git仓库中
    git commit -m [description]
    也可以直接使用git commit -a -m [description]跳过add
  5. 推送至远程 git pull+git push

远程仓库 (origin - 克隆的仓库服务器的默认名)

  • git fetch ([shortname/url]) 将所有数据拉取到你的本地仓库 - 它并不会自动合并或修改当前的工作。
  • git pull 抓取当前追踪的远程分支,并合并到当前分支。
  • git push ([remote-name]) ([branch-name]) 推送到远程仓库
  • git remote 查看远端仓库url
  • git remote add 添加远程仓库

分支

  • git branch 查看分支列表
  • git branch [name] 新建分支
  • git branch -d [hotfix] 删除分支
  • git checkout [name] 切换分支
  • git merge [name] 把目标分支合并到当前分支
    发生的冲突会出现如下区段,由=======分隔,修改后再次使用git add即可
<<<<<<< HEAD:index.html

=======

>>>>>>> iss53:index.html

配置.gitignore

  1. 所有空行或者以 # 开头的行都会被 Git 忽略。
  2. 可以使用标准的 glob 模式匹配。
  3. 匹配模式可以以(/)开头防止递归。
  4. 匹配模式可以以(/)结尾指定目录。
  5. 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
    创建.gitignore文件,如下
# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

你可能感兴趣的:(git)