Compare commits
18 Commits
322e46c880
...
hello_1.0
Author | SHA1 | Date | |
---|---|---|---|
dbda7e15b0 | |||
4e8d0b6f8c | |||
11474a652c | |||
756beab203 | |||
711087a041 | |||
cb4892dd9f | |||
e073cddd87 | |||
d68790956e | |||
4bdf9b82bc | |||
dd95d391fb | |||
c4dea21d20 | |||
c4332b7c93 | |||
90fcb4ac61 | |||
32575fda96 | |||
17110b3072 | |||
3d733c9740 | |||
1fb3a5869a | |||
eedcda440c |
1
hack-1.txt
Normal file
1
hack-1.txt
Normal file
@@ -0,0 +1 @@
|
||||
hello.
|
@@ -0,0 +1,33 @@
|
||||
### 2.2.2
|
||||
|
||||
.git/index 是包含索引的目录树,这个目录树记录了文件名,文件等状态信息
|
||||
|
||||

|
||||
|
||||
`HEAD`指向当前的分支,图中的master中有一个git独特的存储方式,可以在不同的commit之间切换. master就是一个分支
|
||||
|
||||
git add就是把工作去的内容先加到暂存区,分支还没有被更改
|
||||
|
||||
如果想更改分支里的内容,就要commit中
|
||||
|
||||
`git rm --cached <file>`从暂存区中删除文件
|
||||
|
||||
`git reset HEAD` 替换暂存区为HEAD指向的分支的内容(清除暂存区)
|
||||
|
||||
`git checkout -- <file>` 从暂存区中拿出文件替换工作区的内容
|
||||
|
||||
`git checkout HEAD .`或者是`git checkout HEAD <file>`用分支中的文件替换暂存区和工作区的文件
|
||||
|
||||
### 2.2.3
|
||||
|
||||
`git ls-tree`查看HEAD指向的目录树
|
||||
|
||||
`git ls-files`查看暂存区的目录树
|
||||
|
||||
`git diff`比较暂存区和工作区的不同
|
||||
|
||||
`git diff HEAD`比较HEAD分支和工作区的不同
|
||||
|
||||
`git diff --cached` 比较暂存区和HEAD分支的不同
|
||||
|
||||
|
||||
|
6
notes/2.3-git_object.md
Normal file
6
notes/2.3-git_object.md
Normal file
@@ -0,0 +1,6 @@
|
||||
### 2.3.1
|
||||
|
||||
git来说每次提交都创建一个commit对象,commit对象下有两个属性`tree` `parent`,用ID来表示,给定ID就能查看对象的类型是哪个,用`git cat-file -t <id>`来查看对象属性类型
|
||||
`commit`
|
||||
|
||||
`tree`对象下面对每个文件创建一个blob对象,blob对象里存的就是文件内容
|
33
notes/2.4-git_reset.md
Normal file
33
notes/2.4-git_reset.md
Normal file
@@ -0,0 +1,33 @@
|
||||
### 2.4.1 reset
|
||||
|
||||
`HEAD^`代表版本库中的上一次提交
|
||||
|
||||
### 2.4.2 reflog
|
||||
|
||||
查看前五次提交的内容
|
||||
```
|
||||
tail -5 .git/logs/refs/heads/master
|
||||
```
|
||||
|
||||
查看最后五次提交内容
|
||||
```text
|
||||
git reflog show master | head -5
|
||||
```
|
||||
|
||||
得到一个更容易记录的号码`branch@{#}`,来用`git reset --<way> branch@{#}`来记录
|
||||
|
||||
### 2.4.3
|
||||
|
||||
`git reset [-- filename] `用HEAD重置暂存区,加上filename之后只重置单个文件
|
||||
|
||||
|
||||
|
||||
1. HEAD指向的branch更换成指定的commit ID
|
||||
2. 暂存区中的内容替换成HEAD指向的branch的目录树
|
||||
3. 把工作区替换成暂存区中的目录树
|
||||
|
||||
`git reset --hard commit` 1 2 3
|
||||
`git reset --soft commit` 1
|
||||
`git reset --mixed commit` 1 2
|
||||
|
||||
|
42
notes/2.5_git_checkout.md
Normal file
42
notes/2.5_git_checkout.md
Normal file
@@ -0,0 +1,42 @@
|
||||
## 2.5 Git Checkout
|
||||
|
||||
### 2.5.1 HEAD reset = checkout
|
||||
|
||||
查看当前的branch
|
||||
```bash
|
||||
git branch -v
|
||||
```
|
||||
|
||||
checkout到commit的父亲,使得head指针指向父提交,而不是branch
|
||||
```bash
|
||||
git checkout <commit>^
|
||||
```
|
||||
|
||||
在detach模式下add,commit,HEAD都是指向最新的提交
|
||||
|
||||
之后再checkout到原来的分支,detach模式下的操作记录都会丢失
|
||||
|
||||
### 2.5.2 git merge
|
||||
|
||||
```bash
|
||||
git merge <commit>
|
||||
```
|
||||
将<commit>提交合并到当前分支,这样做就可以把detach模式下的提交merge到当前分支上
|
||||
|
||||
合并以后的提交将有两个父提交
|
||||
|
||||
### 2.5.3 git checkout
|
||||
|
||||
```bash
|
||||
用法一: git checkout [-q] [<commit>] [--] <paths>...
|
||||
用法二: git checkout [<branch>]
|
||||
用法三: git checkout [-m] [[-b|--orphan] <new_branch>] [<start_point>]
|
||||
```
|
||||
|
||||
第一种用法的`<commit>`是可选项,如果省略则相当于从暂存区(index)进行检出。reset的默认值是 HEAD,而checkout的默认值是暂存区。
|
||||
|
||||
reset的目的是用HEAD重置暂存区,checkout是想暂存区中覆盖工作区的内容
|
||||
|
||||
第二种用法就是切换分支
|
||||
|
||||
第三种用法是新建分支
|
34
notes/2.6-git_stash.md
Normal file
34
notes/2.6-git_stash.md
Normal file
@@ -0,0 +1,34 @@
|
||||
## 2.6
|
||||
|
||||
### 2.6.1
|
||||
|
||||
用来查看stash列表
|
||||
```bash
|
||||
git stash list
|
||||
```
|
||||
|
||||
恢复进度
|
||||
```bash
|
||||
git stash pop
|
||||
```
|
||||
|
||||
```bash
|
||||
git commit -m "message" # 执行提交
|
||||
git status -s # 查看状态
|
||||
```
|
||||
|
||||
```bash
|
||||
git reset --soft HEAD^ #反悔提交 将HEAD指向当前提交的父提交
|
||||
git reset HEAD a/b/c # 将a/b/c目录下的文件撤出暂存区
|
||||
git reset 将所有的文件从stage中撤出
|
||||
```
|
||||
|
||||
```bash
|
||||
git checkout -- welcome.txt # 清除welcome.txt的改动
|
||||
git clean -nd # 删除本地多余的目录和文件列表
|
||||
git clean -fd # 真正删除
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
28
notes/2.7-git_basic_op.md
Normal file
28
notes/2.7-git_basic_op.md
Normal file
@@ -0,0 +1,28 @@
|
||||
## 2.7 Git Basic Ops
|
||||
|
||||
## 2.7.1 git tag
|
||||
|
||||
给当前的进度打个标签
|
||||
```bash
|
||||
git tag -m "some message" <version-string>
|
||||
git describe # 查看标签
|
||||
```
|
||||
|
||||
## 2.7.2 Git 删除文件
|
||||
git
|
||||
|
||||
```bash
|
||||
rm *.txt
|
||||
git ls-files #本地删除不是真的删除,暂存库中还在,也就是删除的这个命令没有被添加到暂存库中
|
||||
```
|
||||
|
||||
```bash
|
||||
git rm welcome.txt hack-2.txt #将文本文件从git中删除
|
||||
git status
|
||||
git ls-files --with-tree=HEAD^ # 父节点中的文件还在
|
||||
```
|
||||
|
||||
```bash
|
||||
git add -u #将版本库中的本地文件的变更记录到暂存区中
|
||||
```
|
||||
|
0
notes/detached-commit.txt
Normal file
0
notes/detached-commit.txt
Normal file
27
src/Makefile
Normal file
27
src/Makefile
Normal file
@@ -0,0 +1,27 @@
|
||||
OBJECTS = main.o
|
||||
TARGET = hello
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
$(TARGET): $(OBJECTS)
|
||||
$(CC) -o $@ $^
|
||||
|
||||
main.o: | new_header
|
||||
main.o: version.h
|
||||
|
||||
new_header:
|
||||
@sed -e "s/<version>/$$(git describe)/g" \
|
||||
<version.h.in> version.h.tmp
|
||||
@if diff -q version.h.tmp version.h > /dev/null 2>&1; \
|
||||
then \
|
||||
rm version.h.tmp; \
|
||||
else \
|
||||
echo "version.h.in => version.h" ; \
|
||||
mv version.h.tmp version.h;\
|
||||
fi
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET) $(OBJECTS) version.h
|
||||
|
||||
.PHONY: all clean
|
||||
|
8
src/main.c
Normal file
8
src/main.c
Normal file
@@ -0,0 +1,8 @@
|
||||
#include "version.h"
|
||||
#include <stdio.h>
|
||||
|
||||
int main(){
|
||||
printf("Hello, world. \n");
|
||||
printf("version: %s. \n", _VERSION);
|
||||
return 0;
|
||||
}
|
6
src/version.h
Normal file
6
src/version.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef HELLO_WORLD_VERSION_H
|
||||
#define HELLO_WORLD_VERSION_H
|
||||
|
||||
#define _VERSION "old_practise"
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user