Git - 命令

一、 简单命令

  • 创建一个新的 Git 权限
git init     
  • 将文件从工作目录到存储区域。
git add filename    
  • 检查工作目录的内容,暂存区域。
git status         
  • unchecked 未开始跟踪状态(此时状态是红色的)
  • 查看工作目录和存储区域文件的区别
    白色的是上一个版本,+之后绿色的是修改的地方
    按 q 退出 diff 状态
git diff  
  • 添加或者更改文件,Git允许把两部合成一步:
git commit  filename
  • 移动或者删除文件,需要分开
git rm filename
git commit
  • 权限中存储区下的临时存储文件的修改
git commit -m “详情信息”     
  • 查看工程早期的提交版本。提交顺序存放在存储仓库中,你可以这样来查看它。
git log     
- 输出是:一个40位 SHA 的码,提交的唯一标识符。

提交的作者
提交的日期时间
提交的信息

  • 在 Git 中,提交你当前工作的环境的提交称为 HEAD commit。在许多情况下,最近一次的提交时 HEAD commit。
git show HEAD

二、关于回退

  • 将文件存储在你的工作目录下,丢弃当前工作目录上的改变
git checkout HEAD filename
  • 批量添加
git add filename_1 filename_2
  • 在存储区域中重置文件为 HEAD commit 它不能够销毁工作路径中的改变,它仅仅是从存储区域中移除了它们。
    将某一个版本置为HEAD commit。
git reset HEAD filename
Git - 命令_第1张图片
gitreset 理解.png

三、分支

  • 输出 * master, * 后面显示了你当前在什么分支下工作。
git branch 
Git - 命令_第2张图片
gitreset 理解.png

git branch new_branch
创建新的分支

  • 切换分支
git checkout branch_name
  • 合并分支
git merge branch_name

冲突的情况:

<<<<<<< HEAD
master version of line
=======
fencing version of line
>>>>>>> fencing

输入 fencing 选择 fencing 分支中的 HEAD 作为 HEADcommit

  • 删除分支
git branch -d branch_name

三、remote 远程仓库

  • 克隆远程仓库到工作目录下的名称
git clone remote_location clone_name
  • 查看 git 的远程仓库
git remove -v
  • 将远程仓库的改变合并到本地的仓库中。它将会将这些改变添加到远程分支里面。
git fetch
  • 将远程仓库中的改变合并到你的本地 master 分支。
git merge origin/master
  • 将 test 分支上的指定文件合并到当前分支
git checkout test xxx.txt
  • 创建本地分支,并指定拉取跟踪的远程分支
git checkout --track origin/remoteName -b localName
  • 将其他分支的提交合并到当前分支 cherry-pick
git checkout 想要合并的分支
//单个提交
git cherry-pick 某分支的某个提交的commit-hash
//多个提交,中间使用空格分割
git cherry-pick commit-hash1 commit-hash2 commit-hash3
//合并 commit1 到 commit2 的多个提交
git cherry-pick commit1..commit2
  • git revert
    当别人已经克隆线上提交的代码之后,尽量使用 git revert 来减少影响
//撤销master当前往上属第三个提交
git revert master~3
//撤销前的分支
A->B->C->D->E->F->G
//撤销后
A->B->C->D->E->F->G->D‘
  • 修改之前的提交
 git commit --amend
  • 变基提交
    • 用来改变一串提交是以什么为基础的,举例说明,master 在基于 D 提交之后出现了topic 分支,topic 分支在之后发展了 w、X、Y、Z 提交,master 在D 之后有了 E、F、G、H、I 提交,如果让topic 以最新的 master 的 I 提交作为基,如图:


      Git - 命令_第3张图片
      变基前.png

      Git - 命令_第4张图片
      变基后.png
//变基命令
git checkout topic
git rebase master
//或者
git rebase master topic
  • 将一条分支上的开发线整个移植到完全不同的分支上:
//将基于 maint 当前提交的上一个提交分出的分支feature 移植到master 分支上。
git rebase --onto master maint^ feature
移植前.jpg

移植后.jpg
  • 变基操作出现冲突解决方案:

    • 如果发现冲突 rebase 会临时挂起,当冲突解决可以使用 git rebase -continue 恢复变基操作,当觉得这个提交是没有必要的,可以使用 git rebase --skip 跳过(风险很大,有可能之后的提交会依赖这个提交)。如果认为不应该进行变基操作,使用 git rebase --abort 终止
  • 改写提交历史,合并之前提交

//修改基于commit 之后的提交
git rebase -i  commit
  • 多人协作时候的提交merge 现象:
    两个人都基于 develop 分支 B commint 进行开发,a 提交到了远程仓库 C 提交,
    b 也提交了D 本地提交,当b 想要推送至远程仓库的时候,就发生了,问题,出现了 merge 痕迹。

  • git pull --rebase
    拉取上游提交并且把本地提交变基到它们的头部后。

  • 设置一些git配置

git config --global user.name "name"
git config --global user.email "[email protected]"
//查看配置
git config -l
//cat 查看
cat .git/config
//移除设置
git config --unset --global user.email
  • 设置别名
git config --global alias.show-graph \ 
  'log --gragh --abbrev-commit --pretty=oneline'
  • 查看已暂存的文件的sha1
git ls-files --stage
  • 将文件从暂存中取消
git rm --cached filename
  • 重命名文件
//1
mv stuff newstuff
git rm stuff
git add newstuff
//2
git mv stuff newsuff
//显示被改名的文件的整个历史记录
git log --follow filename

四、Git 对象模型

  • Git 对象模型分为工作目录,索引和对象库。


    Git - 命令_第5张图片
    git对象模型.png
  • 第一步,工作目录变化。当刚编辑完文件,有变化的只有工作目录中的文件内容。

  • 第二步,对象库中出现新的blob,索引指向新的blob。当 add file1 之后对象库中出现了新的 file1 文件的散列ID,然后索引也重新指向新的散列 ID。

  • 第三步,创建新的提交,HEAD变化。commit 之后会有三个步骤:

    • 虚拟树对象,索引将转换成一个真实的树对象之后,以SHA1 命名,然后放到对象库中。
    • 其次,用日志消息创建一个新的提交对象后,新的提交将会指向新创建的树对象以及前一个或父提交。
    • master 分支的引用从最近一次提交移动到新创建的提交对象,成为新的master HEAD。

五、Git 的工作流程

1.从远程仓库抓取并且合并改变
2.为一个新的工程创建一个工作的分支
3.在分支上开发并且提交工作
4.从远程仓库抓取并且合并
5.将分支传递到远程仓库

git push origin your_branch_name

  • 会将内容上传到远程仓库,origin 原始仓库。别人可以重新生成分支并且将你的工作合并到 master 分支上。

六、提交

  • HEAD
    始终指向当前分支的最近提交,当切换分支的时候HEAD会更新为指向新分支的最近提交
  • ORIG_HEAD
    当进行某些操作,merge或reset 时,会将调整为心智之前的先前版本的HEAD记录到ORIG_HEAD,便于回滚。
  • FETCH_HEAD
    当使用远程库时候,git fetch命令将抓取分支的头记录到 git/FETCH_HEAD中。FETCH_HEAD是最近抓取fetch分支的HEAD 简写。
  • MERGE_HEAD
    当一个合并操作正在进行时候,MERGE_HEAD是正在合并进 HEAD 的提交
  • 在master 分支但是不在dev topic 分支上的提交
git log ^dev ^topic master
  • 使用git blame 查看每一行责任归属
#从第一行开始查询
git blame -L 1, filename ```

---

###七、diff
+ 工作目录与索引

git diff

+ 工作目录与 HEAD

git diff HEAD

+ 索引与 HEAD

git diff --cached


###八、更改提交
+ git reset-soft 提交
--soft 会将 HEAD 引用指向给定提交,索引和工作目录保持不变。这个命令有最小影响。
+ git reset-mixed
--mixed 会将HEAD  指向给定提交,索引内容也跟着改变以符合给定提交的树结构,但是工作目录保持不变。
+ git reset-hard 提交
HEAD 指向给定提交。索引内容也跟着改变以前符合给定提交的树结构。此外,工作目录页改变以反映给定提交的树的状态。当改变工作目录的时候,整个目录结构都改成给定提交对应的样子,做的修改都将丢失。

你可能感兴趣的:(Git - 命令)