git从0开始

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后,如何撤销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-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 <远程主机名> <本地分支名>:<远程分支名>作用

reference
让电脑自动识别git仓库是公司的还是自己的,自动配置
Git三种方法从远程仓库拉取指定的某一个分支

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值