Discuss / Git / 看了老师教程后,git的大部分操作都会了,但是想到了一个问题,不知道如何解决

看了老师教程后,git的大部分操作都会了,但是想到了一个问题,不知道如何解决

Topic source

打一个比如 假如第一天我创建了一个文件a,并且添加了内容,并提交生成版本1 第二天,添加和修改a文件,并提交生成版本2 第三天,也是添加和修改a文件,但是修改的是第一天的内容,且这些内容并没有被第二天修改过,并提交生成版本3 到了第四天发现第二天更改添加的内容需要删除,但是第三天的更改添加的内容需要保留,请问一下如何通过git的操作实现,最后提交版本4

第四天不要内容2,要内容3,版本4不就是版本3吗?可能老哥意思没有说清楚

梦游长空

#4 Created at ... [Delete] [Delete and Lock User]

真心没看懂提的这问题描述.......说的这是什么话...........(第二天的不要,第三天的要,那你直接提交第三天的,OK?)

大兄弟,把自己搞糊涂了吧。没有什么所谓的修改第一天,第二天的,那只是一个记录。每次修改后都会把内容合并到当前代码中。当前代码只有一份,所以你每次修改不会跟以前修改有毛关系。

恢弘腾达

#6 Created at ... [Delete] [Delete and Lock User]

你这个问题的标题也是醉了 “看了老师教程后,git的大部分操作都会了。。。。。。”

你如果真的都会了,怎么会有这个问题呢?

你第二天提交后,想第三天修改第一天的版本,只有两种方式。

  1. 回退版本
  2. 建立分支

下面分别对这两种情况进行描述。(虽然,我觉得根本没有描述的必要。)

回退版本

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

xiaotaoaaa

#7 Created at ... [Delete] [Delete and Lock User]

你问的没问题,只是某些人自己看不懂你问的而已。

请问下 视频在哪?

无求y

#9 Created at ... [Delete] [Delete and Lock User]

我也觉得问的没问题,只是某些人没看懂。 以只有一个文件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的操作想保留,应该怎么做?

runningman765

#10 Created at ... [Delete] [Delete and Lock User]

你这里前提应该是没有merge提交的。 第四天直接git merge 版本2就会在当前分支上把第二天的提交撤销掉。


  • 1
  • 2

Reply