Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第1回 Git講座
Search
Pudding
PRO
March 18, 2018
Programming
0
770
第1回 Git講座
あくあたん工房での第一回 Git講座の講義資料です。add・commitしてからリモートへpush、プルリクエストがマージされた後、ローカルでのpullする作業までを解説しています。
Pudding
PRO
March 18, 2018
Tweet
Share
More Decks by Pudding
See All by Pudding
GNU Make勉強会 / GNU Make Exercise
pddg
PRO
2
10k
雑に覚えるVim / Vim Tutorial
pddg
PRO
0
87
中古PCのススメ/The fundamentals of used PC
pddg
PRO
1
82
もっと気楽にいきましょうって話 / Make more relax
pddg
PRO
4
2.2k
アイデアの卵と動かざる手 / Do you have something to do to realize your idea?
pddg
PRO
0
170
Docker Seminar for SEL@KIT
pddg
PRO
0
110
進学先を間違ったなと思ったら / I made a mistake in my path
pddg
PRO
0
140
なぜ平文パスワードはNGなのか / Why are plain passwords evil?
pddg
PRO
1
170
Mizql Map @ KITハッカソン2018 by ツナ缶 / Mizql Map
pddg
PRO
0
110
Other Decks in Programming
See All in Programming
生成AIで日々のエラー調査を進めたい
yuyaabo
0
610
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
770
SODA - FACT BOOK
sodainc
1
1.1k
KotlinConf 2025 現地参加の土産話
n_takehata
0
100
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
実践ArchUnit ~実例による検証パターンの紹介~
ogiwarat
2
280
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
280
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
840
GoのWebAssembly活用パターン紹介
syumai
3
10k
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
370
從零到一:搭建你的第一個 Observability 平台
blueswen
1
960
Elixir で IoT 開発、 Nerves なら簡単にできる!?
pojiro
1
150
Featured
See All Featured
Music & Morning Musume
bryan
46
6.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
920
Art, The Web, and Tiny UX
lynnandtonic
299
21k
KATA
mclloyd
29
14k
How to Ace a Technical Interview
jacobian
277
23k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Rails Girls Zürich Keynote
gr2m
94
14k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
790
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
How STYLIGHT went responsive
nonsquared
100
5.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Transcript
(JUߨ࠲ ͋͋ͨ͘Μ
࣍ ։ൃʹ͓͚Δόʔδϣϯཧͷେ͞ (JUͷ֓ཁ (JUϗεςΟϯάαʔϏεʹ͍ͭͯ ࠓΔ͜ͱͷઆ໌
(JUͷ֤ૢ࡞Λަ࣮͑ͯश Ὂ DMPOF DIFDLPVU BEE DPNNJU QVTI QVMM GFUDIʜ HJUΫϥΠΞϯτͷհ
։ൃʹ͓͚Δ όʔδϣϯཧͷେ͞
όʔδϣϯཧ҉ࠇ࣌ʢʣ ˔ ϑΝΠϧ໊Ͱཧ Ὂ ཁૉΛ༩ͯ͠ผ໊Ͱอଘ ˗ ˗ ൛ʢվగ൛ɺ࠷৽൛ʜʣ Ὂ
ͲΕ͕࠷৽͔͔Βͳ͘ͳΔ ˗ ࠷৽൛ ˗ ࠷৽൛ʢʣͳͲʜ Ὂ ͭΒ͍
όʔδϣϯཧ҉ࠇ࣌ʢʣ ˔ ιʔείʔυͷมߋΛ ίϝϯτͰཧ Ὂ มߋऀ Ὂ มߋͳͲ ˔ มߋ͕͔Βͳ͍ɾͤͳ͍
Ὂ ݩͷίʔυͲ͏ͩͬͨͷ͔ Ὂ ॻ͖͑ΒΕͨίʔυ ͬͯ͜ͳ͍ import os # 2018/1/18 ύεΛදࣔ print(os.path) if "/usr/bin" in os.path: # 2018/1/20 มߋ print("Loaded") # 2018/1/22 ޙͰ࣮ # hoge() # 2018/1/15 ফͨ͠ # pudding: ͜͜Α͘ͳ͍ end()
όʔδϣϯཧ҉ࠇ࣌ʢʣ ˔ ෳਓͰ։ൃ͢ΔࡍɺϑΝΠϧΛڞ༗ͯ͠ฤू Ὂ ଞਓͷมߋͱίϯϑϦΫτ Ὂ ࣗͷมߋ͕ଞਓͷ্ॻ͖Ͱফ͑Δ Ὂ ݁ہಉ࣌ʹҰਓͣͭͰ࡞ۀ ˔
ٸͳ։ൃλεΫͷՃ Ὂ ػೳ"·్࣮ͩத Ὂ ػೳ#͕ٸʹඞཁʜ Ͳ͏͢Δʁ
खಈͰมߋΛཧ͢Δͷ ਓྨʹ͗͢͠Δ
None
֓ཁ ˔ ࢄܕόʔδϣϯཧγεςϜ ˔ -JOVT5PSWBMETΒʹΑͬͯ࡞ΒΕͨʢʣ Ὂ -JOVYΧʔωϧͷΑ͏ͳڊେͳίʔυΛޮΑ͘ ཧɾ։ൃ͢ΔͨΊ Ὂ ෳਓ։ൃΛָʹ͢ΔͨΊ
˔ (JU࠷ॳͷόʔδϣϯཧγεςϜͰͳ͍ Ὂ -JOVYΧʔωϧॳ#JU,FFQFSΛ͍ͬͯͨ Ὂ ଞʹ༗໊ͳͷ ˠ$74 4VCWFSTJPO .FSDVSJBM #B[BBSͳͲ
όʔδϣϯཧͬͯʁ ˔ શͯͷมߋཤྺ͕HJUʹΑͬͯอଘ ͞Ε͍ͯΔ Ὂ ୭͕ɾ͍ͭɾͲ͏มߋͨ͠ͷ͔ ˔ աڈͷҙͷมߋΕΔ Ὂ มߋͷ࡞ɿ
˔ ͳΜͰཧͰ͖Δ Ὂ ςΩετʹݶΒͳ͍ ˔ ϦϙδτϦ Ὂ ཧԼʹ͋ΔϓϩδΣΫτͷ͜ͱ commit
ࢄܕͬͯͲ͏͍͏͜ͱʁ
(JUϗεςΟϯάαʔϏε ˔ (JUͷϦϞʔτϦϙδτϦΛ ఏڙ͢ΔαʔϏε Ὂ! (JUIVC Ὂ" (JU-BC Ὂ# #JU#VDLFU
˔ ʮ(JUΛ͏ʯ ˠʮόʔδϣϯཧ͢Δʯ ˔ ʮ(JUIVCΛ͏ʯ ˠʮϦϞʔτϦϙδτϦͱͯ͠(JUIVCΛ͏ʯ
ʢ༨ஊʣब׆ʹཱͭ ˔ (JUIVCΞΧϯτͷఏࣔΛٻΊΔاۀ͋Δ Ὂ (JUIVCʹ͜Μͳઃఆ͋Δˠ ˔ ʮ໘લʹదͳ044 ͍Εͱ͚͍͍Μ͡ΌͶXʯ Ὂ ҰॠͰόϨΔ
Ὂ (JUIVCͷʮࣳੜʯͰ׆ಈͷཤྺ͕͙͢Θ͔Δˣ
ࠓΔ͜ͱ
ԋश ˔ νʔϜ։ൃͷྲྀΕΛମݧ DMPOF BEE DPNNJU CSBODI
QVTI QVMMSFRVFTU ϨϏϡʔɾNFSHF GFUDIɾQVMM ֬ೝ ˔ ͋͋ͨ͘Μެࣜ8FC ϖʔδͷϓϩϑΟʔϧΛ ߋ৽͢Δ
(JUͷ֬ೝ ˔ Λ։͘ Ὂ .BDλʔϛφϧͳͲ Ὂ 8JOEPXT(JU#BTI ˔ ৭ʑ֬ೝ͓ͯ͘͠ Ὂ
(JUͷόʔδϣϯ Ὂ ΧϨϯτσΟϨΫτϦ $ git ——version git version 2.15.1.windows.2 $ pwd /path/to/home # ԋश༻σΟϨΫτϦ࡞ $ mkdir git-seminar $ cd git-seminar
(JUͷॳظઃఆ # ઃఆ $ git config ——global user.name “ͳ·͑” $
git config —-global user.email “Ί͋Ͳ” ˔ Ϣʔβ໊ͱ͔Λઃఆ Ὂ DPNNJUͷཤྺʹදࣔ͞ΕΔ໊લͱϝʔϧΞυϨε Ὂ HJUIVCʹొͨ͠ͷͰྑ͍ͱࢥ͏ ˔ QVCMJDͳϦϙδτϦͷ߹ɺશੈքʹެ։͞Εͯ ͍ΔͷͰɺݸਓใҙ ˔ ΦϓγϣϯͰϦϙδτϦ͝ͱʹઃఆͰ͖Δ ——local
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
˔ ϦϞʔτϦϙδτϦͷίϐʔΛϩʔΧϧʹ࡞͢Δ ˔ HJUϗεςΟϯάαʔϏεͰެ։͞Ε͍ͯΔجຊ ͲΕͰࣗ༝ʹϩʔΧϧDMPOFͰ͖Δ Ὂ ϩʔΧϧϦϙδτϦͪΌΜͱཧ͠Α͏Ͷʂ clone $ pwd
/path/to/git-seminar $ git clone https://github.com/StudioAquatan/web $ ls web $ cd web
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
ͦͷલʹ
·ͣόʔδϣϯཧͷ ཧղΛਂΊΑ͏
˔ (JUͰมߋΛDPNNJUͱ͍͏୯ҐͰอଘ͢Δ Ὂ ϑΝΠϧͦͷͷΛอଘ͢ΔΘ͚Ͱͳ͍ Ὂ εφοϓγϣοτΛͱΔˠ༰ྔͷઅʹͳΔ ˔ ʮݱࡏͲͷDPNNJUΛࢦ͍ͯ͠Δ͔ʯͰϑΝΠϧͷ ঢ়ଶ͕ཧ͞Ε͍ͯΔ Ὂ
ݱࡏࢦ͍ͯ͠Δ࠷৽ͷDPNNJUΛͱݺͿ ˔ DPNNJUʹܻͷҰҙͳϋογϡ͕༩͑ΒΕΔ ˔ DPNNJU࿈ଓϦετͷΑ͏ʹͳ͍ͬͯΔ Ὂ DPNNJU͕ࣗલͷDPNNJUͷϙΠϯλʢܻ ͷҰҙͳϋογϡʣΛ͍࣋ͬͯΔ commit HEAD
commit શͯͷมߋ͕ DPNNJU͠ऴΘͬͨঢ়ଶ
commit ৽͘͠ ͱ͍͏ϑΝΠϧΛ ࡞ͨ͠ঢ়ଶ user.html $VTFSIUNM
˔ ৽͘͠ϑΝΠϧΛεςʔδʹՃ͢ΔίϚϯυ ˔ εςʔδͱʜʁ Ὂ ϦϙδτϦʹө͢ΔલͷϑΝΠϧมߋҰཡ Ὂ ͜͜ʹՃ͞Ε͍ͯͳ͍DPNNJU͞Εͳ͍ add $
git add user.html $ git status On branch master Your branch is up-to-date with ‘origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: user.html
εςʔδʹ ͱ͍͏ϑΝΠϧΛ Ճͨ͠ঢ়ଶ user.html add $VTFSIUNM
˔ εςʔδʹ্͕͍ͬͯΔมߋΛϦϙδτϦө Ὂ ৽͘͠࡞ͨ͠ͷ͓ͯ͘͜͠ͱ Ὂ طʹϦϙδτϦʹؚ·Ε͍ͯΔϑΝΠϧมߋΛՃ ͑ͨͱ͖ˠ ˔ ίϛοτϝοηʔδΘ͔Γ͘͢ Ὂ
ϑΝΠϧΛՃͨ͠ˠzBEEIPHFz Ὂ ϑΝΠϧΛߋ৽ͨ͠ˠzVQEBUFGVHBzͳͲ $ git commit -m “add test_user.html” [master 3ad5b42] add test_user.html 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test_user.html commit add git commit -a -m “ίϛοτϝοηʔδ”
git commit -m “add user.html” $VTFSIUNM εςʔδͷมߋΛө
શͯͷมߋ͕ DPNNJU͠ऴΘͬͨঢ়ଶ git commit -m “add user.html”
εςʔδ͔ΒDPNNJU·Ͱ ˔ ࡞ۀπϦʔ͔ΒϑΝΠϧ ΛBEE͢ΔͱHJUͷཧର ʹͳΔ ˔ BEEࡁΈͷϑΝΠϧʹม ߋΛՃ͑ΔͱɺࣗಈͰ εςʔδʹ্͕Δ add
commit
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
branch ˔ Ұ࿈ͷDPNNJUʹର͠ذΛ࡞Δ͜ͱ͕ग़དྷΔ Ὂ ذΛ࡞͠ϒϥϯνΛ࡞Δ͜ͱ ˠʮϒϥϯνΛΔʯͱ͍͏ ˔ ϒϥϯνͷਖ਼ମʮ͋Δϒϥϯν໊ͷλά͕͍ͨ Ұ࿈ͷDPNNJUͷ͏ͪ࠷৽ͷͷͷϙΠϯλʯ ˔
࠷جຊͷϒϥϯνˠNBTUFS ˔ ϒϥϯνෳΔ͜ͱ͕Ͱ͖Δ Ὂ ྫɿ։ൃஈ֊͝ͱʢEFWFMPQ SFMFBTFʜʣ Ὂ ྫɿػೳ͝ͱʢGFBUVSFIPHF GFBUVSFGVHBʜʣ ˔ جຊతʹԿ͔͢ΔલʹϒϥϯνΛΔ
˔ NBTUFSͷΈ͕͋Δঢ়ଶ ˔ )&"%ͷࢦ͢ҐஔͱNBTUFSͷࢦ͢Ґஔ͕Ұॹ branch # ϒϥϯνҰཡΛදࣔ $ git branch
* master
branch ˔ ྫͱͯࣗ͠ͷϖʔδΛ࡞͢ΔͨΊʹϒϥϯνΛ ࡞ͯ͠ΈΔ Ὂ ϒϥϯν໊zQBHF\\OBNF^^z $ git branch page/{{name}}
$ git branch * master page/{{name}}
checkout $ git checkout page/{{name}} Switched to branch ‘page/{{name}}' $
git branch master * page/{{name}} ˔ ϒϥϯνͷҠಈʹओʹΘΕΔ Ὂ ಛఆͷίϛοτͷϑΝΠϧΛ෮ݩ͢Δػೳ͋Δ ˔ ࡞ࡁΈͷϒϥϯνҠಈ͢Δଞɺϒϥϯν࡞ͱ ಉ࣌ʹDIFDLPVU͢Δ͜ͱͰ͖Δ git checkout -b page/{{name}}
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
branch $ git add member/{{name}}.html $ git commit -m “add
{{name}} page” ˔ QBHF\\OBNF^^ϒϥϯνDPNNJU͞Εͨ ˔ )&"%͕Ҡಈ͠࠷৽ͷDPNNJUΛࢦ͢ Ὂ NBTUFSมԽ͠ͳ͍
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
˔ ϩʔΧϧϦϙδτϦͷมߋΛϦϞʔτϦϙδτϦ ө͢Δ ˔ Ὂ PSJHJOϦϞʔτϦϙδτϦͷผ໊ʢσϑΥϧτʣ Ὂ QVTI͢Δઌͷϒϥϯν໊ʹҙ ˔
͜͜Ͱෆཁ͕ͩɺ৽نͰQVTIΛߦ͏߹ɺϦϞʔ τϦϙδτϦͷΞυϨεΛՃ͢Δඞཁ͕͋Δ push git push origin {{ϒϥϯν໊}} $ git push origin page/{{name}}
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
(JUIVCߨ࠲ࢀর
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
˔ ͋ΔϒϥϯνͰͷDPNNJUΛผͷϒϥϯνऔΓࠐΉ ˔ ҎԼQBHF\\OBNF^^ΛNBTUFSϚʔδ͍ͯ͠Δ Ὂ (JUIVC্ͰQVMMSFRVFTUΛϚʔδ͢Δͱ ϦϞʔτϦϙδτϦͰԼه͕࣮ߦ merge
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
checkout $ git checkout master Switched to branch ‘master' $
git branch * master page/{{name}} ˔ ࡞ۀ͕ऴΘͬͨΒݩͷϒϥϯνΔ Ὂ ࣍ͷϒϥϯνΛੜϒϥϯν͔ΒΒͳ͍Α͏ʹ ˔ DPNNJU͍ͯ͠ͳ͍มߋ͕͋ΔͱΕͳ͍ Ὂ جຊతʹશͯDPNNJU͔ͯ͠ΒΖ͏ Ὂ Ͳ͏ͯ͠ඞཁͳ߹TUBTI͕͑Δ
˔ ϦϞʔτϦϙδτϦͷมߋΛϩʔΧϧϦϙδτϦ ө͢ΔίϚϯυ Ὂ 8PSLJOH%JSFDUPSZͷมߋߦΘͳ͍ ˔ ɹ Ὂ औಘͨ͠มߋΛ࣮ࡍʹө͢Δ Ὂ
PSJHJOͷ\\ϒϥϯν໊^^ΛϩʔΧϧͷ\\ϒϥϯν໊^^ ө͢Δͱ͍͏ҙຯ fetch git merge origin/{{ϒϥϯν໊}} $ git fetch # ͜͜ͰmasterΛϚʔδ͢Δ $ git merge origin/master
˔ ݱࡏ͍ΔϒϥϯνϦϞʔτͷมߋΛϚʔδ͢Δ Ὂ ͦΕҎ্ͷ͍ํΛ͍͚ͯ͠ͳ͍ ˔ લड़ͷGFUDIͱNFSHFPSJHJO\\ϒϥϯν໊^^Λ ҰׅͰ࣮ߦ͢Δ ˔ άάΔͱ༻͠ͳ͍͜ͱΛਪ͢Δهࣄ͕ࢁ ώοτ͢Δ
Ὂ ͪΌΜͱཧղͯ͑͠ศར pull # masterʹ͍ΔͳΒorigin/masterͷมߋ͕औΓࠐ·ΕΔ $ git pull
։ൃͷશମͷྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ ϒϥϯνΛΔ มߋΛBEE DPNNJU ϦϞʔτϦϙδτϦQVTI
QVMMSFRVFTUΛൃߦ NFSHF GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
֬ೝ ˔ ϩʔΧϧө͞Ε͔ͨ֬ೝ͢Δ NBTUFSϒϥϯνΛνΣοΫΞτ NFNCFS\\OBNF^^IUNMΛϒϥβͰ։͘ ˔
Ҏ্͕جຊతͳෳਓ։ൃͷྲྀΕʹͳΔ śŧœʙʢů ьʆ ůʙ̇ git fetch && git merge origin/master
(JUIVCͷ͍ํؚΊͨྲྀΕ ϦϙδτϦΛDMPOFʢ·ͨ࡞ʣ JTTVFΛݐͯΔPSׂΓͯΒΕͨJTTVFΛ֬ೝ ϒϥϯνΛΔ มߋΛBEE DPNNJU
ϦϞʔτϦϙδτϦQVTI QVMMSFRVFTUΛൃߦɺϨϏϡʔɾमਖ਼ޙNFSHF ʢJTTVFΛด͡Δʣ ݩͷϒϥϯνΛDIFDLPVU GFUDIɾQVMMͯ͠ϩʔΧϧʹมߋΛө ֬ೝ
5JQT ˔ 2͍ͭDPNNJU͢Ε͍͍ΜͰ͔͢ʁ "࣌ͱ߹ʹΑΔ͕ɺׂͱࡉ͔͍୯ҐͰDPNNJU͠ ͯશવߏΘͳ͍ɻDPNNJU͕૿͑Δ͜ͱΛڪΕΔ ҙຯແ͍ɻ ˔ 2ϨϏϡʔͯ͠ΒΘͳ͍ͱμϝͰ͔͢ʁ "Ұਓͷ࣌ෆཁɻνʔϜ։ൃͰඞਢ ˔
2ϨϏϡʔ͕ාͯ͘ϓϧϦΫग़ͤ·ͤΜ "ϨϏϡΞʔَ͡Όͳ͍ͷͰ҆৺ͯ͠ ˔ 2ίϯϑϦΫτͨ͠ʂ "࣍ճΓ·͠ΐ͏