Git学习

1 git教程

代码托管平台: github、acgit(基于开源的gitlab搭建)、gitee、

1.1 git基本概念

  • 工作区: 仓库的目录。工作区是独立于各个分支的。
  • 暂存区: 数据暂时存放的区域。类似于工作区写入版本前的暂存区。暂存区是独立于各个分支的。
  • 版本库: 存放所有已经提交到本地仓库的代码版本。
  • 版本结构: 树结构,树中每个节点代表一个代码版本

1.2 git常用命令

1.git config --global user.name xtzy: 设置全局用户名,信息记录在~/.gitconfig文件中

2.git config --global user.email xxx@xxx.com: 设置全局邮箱地址,信息记录在~/.gitconfig文件中

3.git init: 将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

4.git add xx: 将xx文件添加到暂存区

  • git add .: 将所有待加入暂存区的文件加入暂存区

5.git rm --cached xx: 将文件从仓库索引目录中删除(不希望管理哪个文件就用这个)

6.git commit -m "备注信息": 将暂存区的内容提交到当前分支(执行完 暂存区的内容都会删除)

7.git status: 查看仓库状态

8.git diff xx: 查看xx文件相对于暂存区修改了哪些内容

9.git log: 查看当前分支的所有版本

  • git log --pretty=oneline: 一行显示,更加清楚

10.git reflog: 查看HEAD指针的移动历史(包括被回滚的版本)

11.git reset --hard HEAD^git reset --hard HEAD~: 将代码库回滚到上一个版本(内容不会删掉)

  • got reset --hard HEAD^^: 往上回滚两次,以此类推
  • git reset --hard HEAD~100: 往上回滚100个版本
  • git reset --hard 版本号: 回滚到某一个特定版本

12.git checkout xx git restore xx : 将xx文件尚未加入暂存区的修改全部撤销

(工作区相对于暂存区的修改全部删除 即回滚到暂存区的内容)

13.git remote add origin git@git.acwing.com:xxx/XXX.git: 将本地仓库关联到远程仓库

14.git push -u (第一次需要-u以后不需要): 将当前分支推送到远程仓库

  • git push origin branch_name:将本地的某个分支推送到远程仓库

15.git clone git@git.acwing.com:xxx/XXX.git: 将远程仓库XXX下载到当前目录下

16.git checkout -b branch_name: 创建并切换到branch_name这个分支

17.git branch: 查看分支

18.git checkout branch_name: 切换到branch_name这个分支

19.git merge branch_name: 将分支branch_name合并到当前分支上

20.git branch -d branch_name: 删除本地仓库的branch_name分支

21.git branch branch_name: 创建新分支

22.git push --set -upstream orgin branch_name: 设置本地的branch_name分支对应远程仓库的branch_name分支

23.git push -d origin branch_name: 删除远程仓库的branch_name分支

24.git pull: 将远程仓库的当前分支与本地仓库的当前分支合并

  • .git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并

25.git branch --set upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应

26.git checkout -t origin/branch_name: 将远程的branch_name分支拉取到本地

27.git stash: 将工作区和暂存区尚未提交的修改存入栈中

28.git stash apply: 将栈顶存储的修改恢复到当前分支,但不删除栈顶元素

29.git stash drop: 删除栈顶存储的修改

30.git stash pop: 将栈顶存储的修改恢复到当前分支,同时删除栈顶元素

31.git stash list: 查看栈中所有元素

31.git restored --stage xx : 将暂存区的文件从暂存区撤出,但不会更改文件 (我还要管理这个文件)

1.2.1 误删代码进行回滚(直接回滚历史版本也行 看自己需求)

首先用git status 查看状态,若已经git add .存入暂存区,则须使用git restore --staged xx 将误删文件撤离暂存区(即从暂存区扔出来)

然后使用git retore xx将误删文件进行回滚。

1.2.2 回退到历史版本,然后再回到当前版本

首先用git reset --hard 版本号 进行回滚, 然后用git reflog 查看head指针,取出最新版本前七位的版本号

使用git reset --hard 版本号 回到最新版本

1.2.3 结点怎么删掉?(用的不多,想用就查,狠狠的查)

1.2.4 其实本地就可以进行代码管理,管理代码都存在.git文件夹里

1.2.5 将当前目录映射到git上的一个仓库目录(本地和远程对应起来)

git remote add origin git@git.acwing.com:xtzy/project.git

git push -u origin master //即可完成操作

1.2.6 将项目迁移到全新服务器

# 模拟 先把project删除
rm project -rf

git clone git@git.acwing.com:xtzy/project.git

# 引用记录为空

# 本地不用担心误删啦  随时随地可以把项目文件夹克隆下来

1.3 分支操作(在公司用到)

多人开发一般不会在主分支上开发,需要开多分支。

1.3.1 合并分支

# 模拟场景
#创建分支  从master结点继承下来的  和当前版本表示一样
git checkout -b dev

# 查看分支
git branch

# 改变readme.txt值 +777    (暂存区和分支是独立的)
vim readme.txt

git add .

# 持久化操作 (当前在dev分支上)
git commit -m "add 777"

# 回到master目录
git checkout master

# 合并 dev 分支  用的是快速合并模式(没有产生复制,直接将master分支的head结点指向了dev) 
# 如果要强行复制 + -noff (用的不多)
git merge dev

# 删除dev分支   master和dev共用这个点 然后把dev分支删掉
git branch -d dev

1.3.2 合并分支时产生冲突

# 如果有冲突 
# 还原冲突场景
git checkout -b dev2

# 加一个 999
vim readme.txt

git add.
git commit -m "888"

# 切换master分支
git checkout master

# 加 888
vim readme.txt

# 此时合并会产生冲突
git merge dev2

# 这时候read.txt 会多东西  需要手动合并
vim read.txt

git add .

git status

# 持久化
git commit -m "fix conflicts"

# 删除分支dev2 
git branch -d dev2

# 将本地的分支提交到云端 第一次需要加-u
git push

1.3.3 将本地的分支推向云端

# 模拟场景
git checkout -b dev3

# 添加aaa
vim read.txt

git add .

git commit -m "aaa"

# 错了 当前分支没有云端分支 
#git push
git push --set-upstream origin dev3

# 删除分支 需要去其他分支才能删
git checkout master

# 云端分支和本地分支比较独立 这里删了 云端的分支也不会删除
git branch -d dev3

# 删除云端分支
git push -d origin dev3  # 项目在wsl里 做到此处  后面的基本差不多搞清楚了

1.3.4 云端分支传到本地

# 创建新分支dev4
git checkout -b dev4

# 添加bbb
vim readme.txt

git add .

git commit -m "bbb"

# push到云端
git push --set-upstream origin dev4

# 切换到master分支 删除dev4  这时云端有dev4 本地没有
git checkout master

git branch -d dev4

# 把云端的分支push到本地
git checkout -b dev4  # 先创建分支 最好和云端的分支名字一样 
git branch --set-upstream-to=origin/dev4 dev4 # 将本地和云端的分支绑定到一块
git pull # 拉取云端分支  简单认为 拿下来 在 merge

# 然后就可以在本地将master 和 dev4 分支合并
git checkout master
git merge dev4 # 此时readme.txt 里有bbb
vim readme.txt
# 现在就可以删除本地和云端的dev4分支
git branch -d dev4
git push -d origin dev4

git status
git push # 将远程的分支合并到当前分支
# 也可以是云端某个分支传到本地某个分支
git checkout -b dev5

# 添加ccc
vim readme.txt

git add.
git commit -m "777"
git push --set-upstream origin dev5

# 切换master分支  将本地分支删除
git checkout master
git branch -d dev5 # 此时云端多了个分支dev5 比master分支多了写内容

# 云端的分支合并到本地的某个分支
git pull origin dev5  # 云端的dev5分支合并到master分支  当前处于master分支
# 本地可以合并本地的 本地可以合并云端的  云端合并云端(纯在页面操作)

git push 

# 删除云端分支dev5
git push -d origin dev4

1.4 stash操作

git checkout -b dev6

# 加ddd
vim readme.txt

git add readme.txt

git commit -m "ddd"

# 再修改一个 加eee
vim readme.txt  # 此时工作区和暂存区都有修改内容  

# 如果此时服务器挂了  要修改又不希望将当前日志内容提交到版本库里
git stash  # 将当前修改存在一个栈里   这样工作区和暂存区就没有东西了 可以使用git status查看

git stash list # 查看栈里的所有内容

# 创建新分支
git checkout dev7

# 添加 fff
vim readme.txt

git add .

# 持久化
git commit -m "fff"

git checkout dev6

git merge dev7

git branch -d dev7

# 着手把刚刚没做完的内容回复回来
git stash pop  

git status

git add .

git commit -m "fff" 

git checkout master

git merge dev6

git add .

git commit -m "fix confilcts" # 可能没有冲突

1.5 多个同学合作

多人开发一般都不会再master上开发,在dev分支上开发

git checkout -b dev

# 传到云端
git push --set-upstream origin dev

# 另一个服务器 新的机器
# 先加新机器的公钥传到云端 加到账户里
ssh keygen
cd .ssh/
...

# 拉取代码  clone 一般只有一个分支
git clone  git clone git@git.acwing.com:xtzy/project.git

git checkout -d dev 
git branch --set-upstream-to=origin/dev dev # 本地的和云端的分支对应

git pull

# 然后我们在本地修改了代码 小伙伴也修改了 修改的内容不同  且都持久化了
vim readme.txt
# 现在状态是云端有一个dev分支 我们自己也有一个dev分支  小伙伴也有一个dev分支 但内容不一样
# 且小伙伴已经push上去了 这意味着云端分支就是小伙伴的内容
# 这时候我们push上去  就会报错   有冲突
# 这时候要解决冲突  要git pull将云端的分支拉到分支解决冲突
# 这个一般不会发生 以为写的是不同文件 如果写的是相同文件的化冲突就会发生
git pull

git add .

git commit -t "fix conflict"

git push # 这样云端的分支就会更新为你处理冲突完之后的版本

1.6 用git来统计代码量

 find -name '*.java' | xargs cat | wc -l
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇