Git学习

sdjasj

简单使用

初始化用户名

1
2
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

创建仓库

1
$ git init

添加文件到仓库

1
$ git add filename #添加到暂存区

文件提交到仓库

1
$ git commit -m "本次提交的说明,可以输入任意内容"   #将暂存区文件添加到master的分支

管理文件

历史记录

1
2
3
4
5
6
$ git log
git log [分支名] 查看某分支的提交历史,不写分支名查看当前所在分支
git log --oneline 一行显示提交历史
git log -n 其中 n 是数字,查看最近 n 个提交
git log --author [贡献者名字] 查看指定贡献者的提交记录
git log --graph 图示法显示提交历史

版本回退

1
2
3
4
5
6
#版本回退是针对整个仓库

#HEAD^回退一个版本 HEAD^^回退两个版本...以此类推 Head~100回退100个版本
$ git reset --hard HEAD^
#1094a是commit_id,指定commit_id回到未来版本
$ git reset --hard 1094a

查看历史命令

1
2
#帮助查看commitid回到未来版本
$ git reflog

撤销修改

1
2
3
4
5
6
7
8
9
10
11
#撤销修改针对某个文件

#一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
#一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
$ git checkout -- file

#已经把文件提交到暂存区
##把暂存区的修改撤销掉(unstage),重新放回工作区
$ git reset HEAD <file>
##再撤销工作区文件修改
$ git checkout -- file
1
2
3
4
# 将工作区的xxx回滚到暂存区中的xxx
git restore xxx
# 撤销暂存区中的xxx的修改
git restore --staged xxx

删除文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#将文件从暂存区和工作区中删除
$ git rm <file>
#如果再commit了
$ git commit
#也可以恢复
#$ git reset --hard HEAD^ 回退到上个版本

#暂存区指定的文件替换工作区的文件
$ git checkout -- filename

#直接从暂存区删除文件,工作区则不做出改变
git rm --cached <file>”

#会用 HEAD 指向的 master 分支中的指定文件替换暂存区文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
git reset HEAD <file> #再用git checkout --filename暂存区指定文件替换工作区文件
#清除工作区未跟踪文件
git clean <file> -f

远程仓库

1
2
3
4
5
6
7
8
git push <远程仓库> <分支名>#本地仓库提交到远程仓库
加了参数-u后,以后即可直接用git push 代替git push origin master
git push -u origin master
git pull #远程仓库更新到本地
git remote #查看远程仓库名字,防止忘了
git clone + [仓库地址] #克隆前面在 GitHub 上创建的仓库
git status #查看整个仓库的状态
git remote add <远程仓库名字,一般为origin> git@github.com:michaelliao/learngit.git #添加远程仓库

分支

Git 是怎么创建新分支的呢? 很简单,它只是为你创建了一个可以移动的新的指针

Git 又是怎么知道当前在哪一个分支上呢? 也很简单,它有一个名为 HEAD 的特殊指针,指向当前所在的本地分支(将 HEAD 想象为当前分支的别名)

分支切换改变的是HEAD所指向的分支

所有分支共用一个暂存区,commit的时候看在哪个分支就把节点加到哪个分支后面

创建与合并分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
git branch <分支名> #创建分支

git checkout <分支名> #切换分支
######上述两条命令等价于git checkout -b <分支名>

git branch #列出所有分支,当前分支前面会标一个*号

git branch -D <分支> #删除分支

git branch -m <分支1> <分支2> 把分支1重命名为分支2

# 查看所有的远程与本地分支
$ git branch -a

git merge <指定分支> #合并指定分支到当前分支

#查看每一个分支的最后一次提交
git branch -v

分支切换会改变你工作目录中的文件

​ 在切换分支时,一定要注意你工作目录里的文件会被改变。 如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。 如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样

切换分支遇到冲突

原因:当前分支工作区或暂存区有文件没有commit

解决办法:当前分支先commit再切换分支

解决冲突

1.当你试图合并两个分支时, 如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候, 只会简单的将指针向前推(指针右移),因为这种情况下的合并操作没有需要解决的分歧——这就叫做 “快进(fast-forward)”。

2.当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

步骤

1.根据git status看哪里有冲突,去修改

2.将修改完的文件git add

3.修改完所有冲突后git commit

分支管理

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

1
git merge --no-ff -m "merge with no-ff" <指定分支>

修复bug

当前分支还没提交,想修复另一个分支的bug时

1.git stash 保存工作现场

2.git stash pop恢复工作现场

3.git cherry-pick <commit> 把bug提交的修改“复制”到当前分支,避免重复劳动

  • 標題: Git学习
  • 作者: sdjasj
  • 撰寫于: 2022-02-14 15:27:19
  • 更新于: 2023-01-09 17:03:02
  • 連結: https://redefine.ohevan.com/2022/02/14/Git学习/
  • 版權宣告: 本作品采用 CC BY-NC-SA 4.0 进行许可。
 留言