文章目录
add和commit
# 初始化git存储库
$ git init
Initialized empty Git repository in /Users/enjlife/test_git/.git/
$ echo "# test_git" >> README.md
$ ls
README.md
# 查看当前git状态:在分支master上,没有commits,有一个没有被track的文件
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
nothing added to commit but untracked files present (use "git add" to track)
$ git add README.md
# 添加了新文件
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
$ git commit -m "first commit"
[master (root-commit) 3c9665e] first commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
$ git status
On branch master
nothing to commit, working tree clean
# 查看版本时间线
$ git log --graph --all
* commit 3c9665ef03aff2f275bebea7b0fbfa31f2446b18 (HEAD -> master)
Author: enjlife <907549582@qq.com>
Date: Tue Aug 3 23:59:01 2021 +0800
first commit
$ echo "file 1" >> file1
$ git add .
$ git commit -m "commit file1"
* commit a473a9b116eaa95d6af2d9e4ea5d0147219e9062 (HEAD -> master)
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:04:01 2021 +0800
|
| commit file1
|
* commit 3c9665ef03aff2f275bebea7b0fbfa31f2446b18
Author: enjlife <907549582@qq.com>
Date: Tue Aug 3 23:59:01 2021 +0800
first commit
# 每次commit,master都会向前移动一步;HEAD指向当前正在工作的分支
$ echo "file 2" >> file2
$ git add .
$ git commit -m "commit file2"
[master bc06223] commit file2
1 file changed, 1 insertion(+)
create mode 100644 file2
$ git log --graph --all
* commit bc06223d87c851b9a62d255fd90cab5d4a308e40 (HEAD -> master)
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:08:58 2021 +0800
|
| commit file2
|
* commit a473a9b116eaa95d6af2d9e4ea5d0147219e9062
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:04:01 2021 +0800
|
| commit file1
|
* commit 3c9665ef03aff2f275bebea7b0fbfa31f2446b18
Author: enjlife <907549582@qq.com>
Date: Tue Aug 3 23:59:01 2021 +0800
first commit
# 建立一个分支
$ git branch develop
$ git branch
develop
* master
# 切换分支,修改HEAD指针的指向
$ git checkout develop
Switched to branch 'develop'
# 也可以使用下面替换上面两段代码
# git checkout -b develop
$ echo "add text" >> file2
$ cat file2
file 2
add text
$ git add .
$ git commit -m "add text to file2"
[develop a6e2bff] add text to file2
1 file changed, 1 insertion(+)
$ git log --graph --all
* commit a6e2bffdad7170b1b06c4af1f18740f6aabc91b4 (HEAD -> develop)
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:19:49 2021 +0800
|
| add text to file2
|
* commit bc06223d87c851b9a62d255fd90cab5d4a308e40 (master)
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:08:58 2021 +0800
|
| commit file2
|
* commit a473a9b116eaa95d6af2d9e4ea5d0147219e9062
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:04:01 2021 +0800
|
| commit file1
|
* commit 3c9665ef03aff2f275bebea7b0fbfa31f2446b18
Author: enjlife <907549582@qq.com>
Date: Tue Aug 3 23:59:01 2021 +0800
first commit
# 见证奇迹的时刻
$ git checkout master
Switched to branch 'master'
$ cat file2
file 2
# 合并分支
$ git merge develop
Updating bc06223..a6e2bff
Fast-forward
file2 | 1 +
1 file changed, 1 insertion(+)
$ cat file2
file 2
add text
$ git log --graph --all
* commit a6e2bffdad7170b1b06c4af1f18740f6aabc91b4 (HEAD -> master, develop)
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:19:49 2021 +0800
|
| add text to file2
|
* commit bc06223d87c851b9a62d255fd90cab5d4a308e40
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:08:58 2021 +0800
|
| commit file2
|
* commit a473a9b116eaa95d6af2d9e4ea5d0147219e9062
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:04:01 2021 +0800
|
| commit file1
|
* commit 3c9665ef03aff2f275bebea7b0fbfa31f2446b18
Author: enjlife <907549582@qq.com>
Date: Tue Aug 3 23:59:01 2021 +0800
first commit
$ git checkout develop
$ echo "add text2 to file2" >> file2
$ git checkout master
# no-ff表示禁用快速合并,会有分支记录
$ git merge --no-ff -m "merge develop" develop
Merge made by the 'recursive' strategy.
file2 | 1 +
1 file changed, 1 insertion(+)
$ git log --graph --all
* commit b1540ada22834c73bc168c2e9c3cda38e933e247 (HEAD -> master)
|\ Merge: a6e2bff 7cc9c87
| | Author: enjlife <907549582@qq.com>
| | Date: Wed Aug 4 00:30:50 2021 +0800
| |
| | Merge branch 'develop'
| |
| * commit 7cc9c87f1fe999f25ed1aeaa65a5c05a67ecc31e (develop)
|/ Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:28:43 2021 +0800
|
| add text2 to file2
|
* commit a6e2bffdad7170b1b06c4af1f18740f6aabc91b4
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:19:49 2021 +0800
|
| add text to file2
|
* commit bc06223d87c851b9a62d255fd90cab5d4a308e40
| Author: enjlife <907549582@qq.com>
| Date: Wed Aug 4 00:08:58 2021 +0800
|
:
撤销add
git restore --staged <file>
将文件从暂存区移除
git restore <file>
撤销文件的修改
git操作之二:git restore
两种方式git clone:https和ssh
在git中clone项目有两种方式:HTTPS和SSH,它们的区别如下:
HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码;
SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。
git撤销commit
git 删除commit的文件
# 查看要删除的文件/文件夹
git rm -r -n --cached 文件/文件夹
# 执行删除
git rm -r --cached 文件/文件夹
# 提交
git commit -m 'xxx'
# push
git push
如果我们工作区也不需要这个文件/文件夹,可以直接从工作区删除
git rm file
git commit -m 'delete file'
git push
Git删除远程分支已push的文件或者文件夹
git-commit后但是发现有不需要push的文件或者文件夹解决-实测!
git提交不必要的文件或文件夹的配置使用
git stash
git push
- git push <远程主机名> <本地分支名>:<远程分支名>
如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
注意:这里的:前后是必须没有空格的。
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
# origin远程主机 本地master到远程master
git push origin master:master
# 当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机
# 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
git push -u origin master
# 删除远程master
git push origin :master
# 与上述代码等价
git push origin --delete master
rebase和merge
Git push 时如何避免出现 “Merge branch ‘master’ of …”
git rebase 还是 merge的使用场景最通俗的解释
修改最后一次提交
git commit --amend 修改git提交记录用法详解
拉取一个分支
# 1 HEAD指向拉取的分支
$ git clone -b 远程分支名 https://github.com/....git
# 2 拉取再切换
$ git clone https://github.com/....git
$ cd ...
$ git fetch
$ git checkout 想要的分支
# 3 本地建立再拉取
$ git clone https://github.com/....git
$ cd ...
$ git checkout -b 想要的分支 origin/想要的分支
$ git pull origin 想要的分支 # 拉取代码
解决merge的冲突
Your local changes would be overwritten by merge. Commit, stash or revert them to proceed.
Git 冲突:Your local changes would be overwritten by merge. Commit, stash or revert them to proceed.
多个git仓库配置
git push -u origin master和git push <远程主机名> <本地分支名>:<远程分支名>作用