Git使用笔记

文章目录

  • git 起步
    • 分布式版本控制系统( Distributed Version Control System,简称 DVCS )
    • 文件的三种状态
    • 基本的 Git 工作流程
    • 配置用户信息
    • 获取帮助
  • git基础
    • 克隆现有仓库仓
    • 记录每次更新到仓库
      • 文件状态的生命周期
      • 检查当前文件状态 git status
      • 新建文件
      • 跟踪新文件 git add
      • 删除所有untracked文件
      • 修改已跟踪文件
      • 撤销已修改文件 git checkout
      • 暂存已修改文件 git add
      • 修改已暂存文件
      • 撤销已修改文件
      • 查看修改详情 git diff
      • 提交更新 git commit
      • 跳过暂存区域提交
      • 撤销提交
  • 远程仓库的使用
    • 查看远程仓库
    • 添加远程仓库
    • 从远程仓库中抓取与拉取
    • 推送到远程仓库
    • 查看远程仓库
    • 远程仓库的移除与重命名
  • 分支
    • 查看本地分支
    • 创建本地分支
    • 切换本地分支
    • 查看远程分支
    • 新建本地分支(根据当前本地分支)
    • 删除本地分支
    • 从远程获取dev
    • 拉取远程某个分支到本地
    • 推送分支到远程
      • 拉取分支并合并
    • 查看文件修改记录
    • git不用输入用户名和密码
  • git push免输入账号和密码

官方网址:https://git-scm.com/book/zh/v2

git 起步

分布式版本控制系统( Distributed Version Control System,简称 DVCS )

客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
Git使用笔记_第1张图片

文件的三种状态

对于任何一个文件,在 Git 内都只有三种状态:已修改(modified),已暂存(staged)和已提交(committed)。
已修改:表示修改了某个文件,但还没有放到暂存区域。
已暂存:表示修改了某个文件,并且已经放到暂存区域。
已提交:表示该文件已经被安全地保存在本地仓库中了。
由此我们看到 Git 管理项目时,文件流转的三个工作区域:工作目录暂存区域,以及本地仓库

Git使用笔记_第2张图片

基本的 Git 工作流程

  • 工作目录中修改某些文件。
  • 对修改后的文件进行快照,然后保存到暂存区域
  • 提交更新,将保存在暂存区域的文件快照永久转储到本地仓库中。

配置用户信息

$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]

获取帮助

要想获得 config 命令的手册,执行

$ git help config

git基础

克隆现有仓库仓

$ git clone git://github.com/schacon/grit.git

如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit

记录每次更新到仓库

文件状态的生命周期

Git使用笔记_第3张图片
未跟踪(Untracked):Git在之前的快照(提交)中没有这些文件;
已跟踪(tracked):本来就被纳入版本控制管理的文件,在上次快照中有它们的记录。工作一段时间后,它们的状态可能是未更新(unmodified),已修改(modified)或者已放入暂存区(staged)。

检查当前文件状态 git status

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。

新建文件

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add ..." to include in what will be committed)

        newfile.md

nothing added to commit but untracked files present (use "git add" to track)

Untracked files:未跟踪文件
GIt不会自动将新建文件纳入跟踪范围,除非你明确声明跟踪该文件,因而不用担心把临时文件什么的也归入版本管理。

跟踪新文件 git add

使用命令 git add 开始跟踪一个新文件。

$ git add newfile.md
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        new file:   newfile.md

Changes to be committed:已暂存。

删除所有untracked文件

查看一下,如果清理的话,交付清理哪些文件

git clean -nf

如果确定上一步的的操作列表里都是没用的,再清理

git clean -f

修改已跟踪文件

现在我们修改之前已跟踪过的文件 benchmarks.rb,然后再次运行 status 命令

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        new file:   newfile.md

Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   benchmarks.rb

Changes not staged for commit:已修改(modified),说明已跟踪文件的内容发生了变化,但还没有放到暂存区。

撤销已修改文件 git checkout

撤销指定文件

$ git checkout file-name

撤销所有文件

$ git checkout .

暂存已修改文件 git add

要暂存这次更新,需要运行 git add 命令(这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区)

$ git add benchmarks.rb
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        modified:   benchmarks.rb
        new file:   newfile.md

现在两个文件都已暂存,下次提交时就会一并记录到仓库。

修改已暂存文件

再次修改benchmarks.rb文件(添加注释),然后运行git status:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        modified:   benchmarks.rb
        new file:   newfile.md

Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   benchmarks.rb

benchmarks.rb 文件出现了两次!一次算未暂存,一次算已暂存,这怎么可能呢?
实际上 Git 只不过暂存了你运行 git add 命令时的版本,如果现在提交,那么提交的是添加注释前的版本,而非当前工作目录中的版本。所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来:

git add benchmarks.rb
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        modified:   benchmarks.rb
        new file:   newfile.md

撤销已修改文件

放弃指定文件的缓存

 git reset HEAD filepathnam

放弃所有的缓存

git reset HEAD .

查看修改详情 git diff

git diff:查看修改之后还没有暂存起来的变化内容
git diff --cached :比较已经暂存起来的文件和上次提交时的快照之间的差异。(即:git diff --staged)

提交更新 git commit

现在的暂存区域已经准备妥当可以提交了。在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。

$ git commit -m 'the reason'

跳过暂存区域提交

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

$ git commit -a -m 'the reason'

撤销提交

退到上一次commit的状态

git reset --hard HEAD^

你可以使用 git log 命令来查看git的提交历史。

git reset --hard  commitid 

远程仓库的使用

查看远程仓库

$ git clone https://github.com/schacon/ticgit
$ git remote
origin
$ git remote -v
origin	https://github.com/schacon/ticgit (fetch)
origin	https://github.com/schacon/ticgit (push)

添加远程仓库

git remote add  nogossun https://github.com/paulboone/ticgit

从远程仓库中抓取与拉取

$ git fetch [remote-name]

推送到远程仓库

$ git push origin master

查看远程仓库

远程仓库的移除与重命名

$ git remote rename pb paul
$ git remote rm paul

分支

查看本地分支

$ git branch

创建本地分支

git branch 分支名,例如:git branch test_branch

这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。

切换本地分支

git checkout 分支名,例如从master切换到分支:git checkout test_branch

查看远程分支

$ git branch -a

新建本地分支(根据当前本地分支)

git branch -b 'my_branch'

删除本地分支

$ git branch -d 

从远程获取dev

git pull origin dev

拉取远程某个分支到本地

git checkout -b 本地分支名 origin/远程分支名

推送分支到远程

git push 仓库名称(origin )分支名称

拉取分支并合并

git pull origin master:my_test

将origin厂库的master分支拉取并合并到本地的my_test分支上。
如果省略本地分支,则将自动合并到当前所在分支上。如下:

git pull origin master

查看文件修改记录

首先,查看该文件相关的commit记录

git log -- filename

可以显示该文件每次提交的diff

git log -p filename

查看某次提交中的某个文件变化

git show commit-id filename

git不用输入用户名和密码

使用git pull或者git push每次都需要输入用户名和密码很不人性化,耽误时间,现在教大家一条命令实现保存用户名和密码不用再输入

git config --global credential.helper store
git pull /git push (这里需要输入用户名和密码,以后就不用啦)

push你的代码 (git push), 这时会让你输入用户名和密码, 这一步输入的用户名密码会被记住, 下次再push代码时就不用输入用户名密码 ! 这一步会在用户目录下生成文件.git-credential记录用户名密码的信息。

git push免输入账号和密码

git config --global credential.helper store

你可能感兴趣的:(运维,调试,开发工具)