看了老师教程后,git的大部分操作都会了,但是想到了一个问题,不知道如何解决
Topic source你这个问题的标题也是醉了 “看了老师教程后,git的大部分操作都会了。。。。。。”
你如果真的都会了,怎么会有这个问题呢?
你第二天提交后,想第三天修改第一天的版本,只有两种方式。
- 回退版本
- 建立分支
下面分别对这两种情况进行描述。(虽然,我觉得根本没有描述的必要。)
回退版本
hexo@win-turn:~$ mkdir tmp
hexo@win-turn:~$ cd tmp
hexo@win-turn:~/tmp$ git init
已初始化空的 Git 仓库于 /home/hexo/tmp/.git/
hexo@win-turn:~/tmp$ echo "现在是第一天"
现在是第一天
hexo@win-turn:~/tmp$ touch a
hexo@win-turn:~/tmp$ vi a
hexo@win-turn:~/tmp$ cat a
day 1
hexo@win-turn:~/tmp$ git add .
hexo@win-turn:~/tmp$ git commit -m "edit file a: 'day 1'"
[master (根提交) 5f930a8] edit file a: 'day 1'
1 file changed, 1 insertion(+)
create mode 100644 a
hexo@win-turn:~/tmp$ echo "现在是第二天"
现在是第二天
hexo@win-turn:~/tmp$ vi a
hexo@win-turn:~/tmp$ cat a
day 1
day 2
hexo@win-turn:~/tmp$ git add .
hexo@win-turn:~/tmp$ git commit -m "edit file a: add 'day 2'"
[master 6f560ea] edit file a: add 'day 2'
1 file changed, 1 insertion(+)
hexo@win-turn:~/tmp$ echo "现在是第三天"
现在是第三天
hexo@win-turn:~/tmp$ git log --pretty=oneline
6f560eac09b02ed9392ca2d74a5bf2bbf3fee00e (HEAD -> master) edit file a: add 'day 2'
5f930a813beb21d7f3c70a4025ea8b6e4a3d3346 edit file a: 'day 1'
hexo@win-turn:~/tmp$ git reset --hard 5f930a8
HEAD 现在位于 5f930a8 edit file a: 'day 1'
hexo@win-turn:~/tmp$ cat a
day 1
hexo@win-turn:~/tmp$ vi a
hexo@win-turn:~/tmp$ cat a
day 1
day 3
hexo@win-turn:~/tmp$ git add .
hexo@win-turn:~/tmp$ git commit -m "edit file a: add 'day 3'"
[master b7d8807] edit file a: add 'day 3'
1 file changed, 1 insertion(+)
hexo@win-turn:~/tmp$ echo "现在是第四天"
现在是第四天
hexo@win-turn:~/tmp$ cat a
day 1
day 3
建立分支
hexo@win-turn:~$ mkdir tmp
hexo@win-turn:~$ cd tmp
hexo@win-turn:~/tmp$ git init
已初始化空的 Git 仓库于 /home/hexo/tmp/.git/
hexo@win-turn:~/tmp$ echo "现在是第一天"
现在是第一天
hexo@win-turn:~/tmp$ touch a
hexo@win-turn:~/tmp$ vi a
hexo@win-turn:~/tmp$ cat a
day 1
hexo@win-turn:~/tmp$ git add .
hexo@win-turn:~/tmp$ git commit -m "edit file a: 'day 1'"
[master (根提交) c177c3f] edit file a: 'day 1'
1 file changed, 1 insertion(+)
create mode 100644 a
hexo@win-turn:~/tmp$ echo "现在是第二天"
现在是第二天
hexo@win-turn:~/tmp$ git checkout -b day2
切换到一个新分支 'day2'
hexo@win-turn:~/tmp$ vi a
hexo@win-turn:~/tmp$ cat a
day 1
day 2
hexo@win-turn:~/tmp$ git add .
hexo@win-turn:~/tmp$ git commit -m "edit file a: add 'day 2'"
[day2 001e6c2] edit file a: add 'day 2'
1 file changed, 1 insertion(+)
hexo@win-turn:~/tmp$ echo "现在是第三天"
现在是第三天
hexo@win-turn:~/tmp$ git checkout master
切换到分支 'master'
hexo@win-turn:~/tmp$ git branch
day2
* master
hexo@win-turn:~/tmp$ cat a
day 1
hexo@win-turn:~/tmp$ vi a
hexo@win-turn:~/tmp$ cat a
day 1
day 3
hexo@win-turn:~/tmp$ git add .
hexo@win-turn:~/tmp$ git commit -m "edit file a: add 'day 3'"
[master 51896e7] edit file a: add 'day 3'
1 file changed, 1 insertion(+)
hexo@win-turn:~/tmp$ echo "现在是第四天"
现在是第四天
hexo@win-turn:~/tmp$ cat a
day 1
day 3
我也觉得问的没问题,只是某些人没看懂。
以只有一个文件demo.txt
的仓库为例:
第一天长这样:
day1
commit id暂记为commit_day_1 第二天长这样:
day1
day2
commit id暂记为commit_day_2 第三天长这样:
day3
day2
commit id暂记为commit_day_3
现在时间到了第四天,问题的意思是+day2
的改变不想要了,但是day1
->day3
的操作想保留,应该怎么做?
- 1
- 2
的神烦大叔是谁
打一个比如 假如第一天我创建了一个文件a,并且添加了内容,并提交生成版本1 第二天,添加和修改a文件,并提交生成版本2 第三天,也是添加和修改a文件,但是修改的是第一天的内容,且这些内容并没有被第二天修改过,并提交生成版本3 到了第四天发现第二天更改添加的内容需要删除,但是第三天的更改添加的内容需要保留,请问一下如何通过git的操作实现,最后提交版本4